微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这个想法是采用一个数组并返回一个对象,该对象使用该字符的次数

如何解决这个想法是采用一个数组并返回一个对象,该对象使用该字符的次数

//适用于空数组,但对于包含内容的数组,它会显示“无法设置未定义的属性 '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 举报,一经查实,本站将立刻删除。