我需要编写一个JS函数,该函数从给定的字符串创建对象。字符串字符是对象键。重复的字符不应包含两次。所有键的值为零。
示例:输入objFromStr("aaabc")
应该返回{a: 0, b: 0, c: 0}
这是我的解决方案:
function objFromStr(inStr) {
let charsArr = inStr.split("");
let charsObj = {};
var alreadyInArr = [];
for (var i = 0; i < charsArr.length; i++) {
if (!(alreadyInArr.includes(charsArr[i]))) {
charsObj[charsArr[i]] = 0;
} else {
alreadyInArr.push(charsArr[i]);
}
}
return charsObj;
}
该解决方案按预期工作,但是我不明白为什么。
我使用
alreadyInArr
检查字符重复。但是,当我记录我的alreadyInArr
时,它是空的。因此,运行此代码后:
function objFromStr(inStr) {
let charsArr = inStr.split("");
console.log("charsArr is:", charsArr);
let charsObj = {};
var alreadyInArr = [];
for (var i = 0; i < charsArr.length; i++) {
if (!(alreadyInArr.includes(charsArr[i]))) {
charsObj[charsArr[i]] = 0;
} else {
alreadyInArr.push(charsArr[i]);
}
}
console.log("alreadyInArr is:", alreadyInArr);
return charsObj;
}
console.log(objFromStr("aaabc"));
我的输出是:
charsArr is: [ 'a', 'a', 'a', 'b', 'c' ]
alreadyInArr is: []
{ a: 0, b: 0, c: 0 }
有人可以解释为什么
alreadyInArr
为空而功能仍然按预期工作吗?这是一支笔:https://codepen.io/t411tocreate/pen/bYReRj?editors=0012
最佳答案
您的else
子句根本无法到达,因为您没有将元素推入正确的位置,您可以在循环内添加console.log()
来查看数组在所有迭代中仍然为空。
相反,应在if条件中将元素推送到,例如:
for (var i = 0; i < charsArr.length; i++) {
if (!alreadyInArr.includes(charsArr[i])) {
charsObj[charsArr[i]] = 0;
alreadyInArr.push(charsArr[i]);
}
}
希望这可以帮助。
function objFromStr(inStr) {
let charsArr = inStr.split("");
console.log("charsArr is:", charsArr);
let charsObj = {};
var alreadyInArr = [];
for (var i = 0; i < charsArr.length; i++) {
if (!alreadyInArr.includes(charsArr[i])) {
charsObj[charsArr[i]] = 0;
alreadyInArr.push(charsArr[i]);
}
}
console.log("alreadyInArr is:", alreadyInArr);
return charsObj;
}
console.log(objFromStr("aaabc"));