如何解决这个想法是采用一个数组并返回一个对象,该对象使用该字符的次数
//适用于空数组,但对于包含内容的数组,它会显示“无法设置未定义的属性 '0'”
function countElements(elements) {
let returnCount = {
};
for (let i = 0; i < elements.length; i++){
if (elements[i] !== Object.keys(returnCount)){
returnCount.elements[i] = 1;
}
else if (elements[i] === returnCount.elements[i]){
returnCount.elements[i] += 1;
}
}
return returnCount;
}
解决方法
首先, returnCount 是一个对象,您正在分配一个属性标识符,因为数组不是有效的对象属性并访问数组索引。
returnCount.elements[i] = 1;
不会工作,这会引发错误
returnCount[elements[i]] = 1
适用于您的情况
还有,
if (elements[i] !== Object.keys(returnCount))
只会返回 false,因为 Object.keys 返回一个数组
而不是循环使用reduce,它非常适合此类问题。
function countElements(elements) {
return elements.reduce((resultObj,currentElem)=>{
if(!resultObj[currentElem]){
resultObj[currentElem]=1;
}
else{
resultObj[currentElem]+=1;
}
return resultObj;
},{});
}
const result=countElements(["a","b","p","r","p"])
console.log(result)
从您的代码开始,您可以使用 ??
运算符,当其左侧操作数为 null 或未定义时,返回其右侧操作数并重写您的代码,如下所示:
function countElements(elements) {
let returnCount = {};
for (let i = 0; i < elements.length; i++) {
returnCount[elements[i]] = (returnCount[elements[i]] ?? 0) + 1;
}
return returnCount;
}
console.log(countElements(''));
console.log(countElements('a'));
console.log(countElements('ab'));
console.log(countElements('aab'));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。