Javascript 需要遍历数组以获得要添加到空对象的特定键:值对

Javascript 需要遍历数组以获得要添加到空对象的特定键:值对,javascript,arrays,object,Javascript,Arrays,Object,对于这个问题,函数接受字符串数组并返回一个对象。键应该是字符串中的字符数,值应该是具有该数量字符的字符串出现的次数 我以为我要去某个地方,然后我被卡住了。我非常感谢你的帮助,我已经尝试过无数种不同的方式在谷歌上搜索,但是没有成功。谢谢大家! 结果应该是这样的:characterCount['apple','berry','cherry']/{5:2,6:1} function characterCount(arr){ var newObj = {}; var valueMax = 0;

对于这个问题,函数接受字符串数组并返回一个对象。键应该是字符串中的字符数,值应该是具有该数量字符的字符串出现的次数

我以为我要去某个地方,然后我被卡住了。我非常感谢你的帮助,我已经尝试过无数种不同的方式在谷歌上搜索,但是没有成功。谢谢大家!

结果应该是这样的:characterCount['apple','berry','cherry']/{5:2,6:1}

function characterCount(arr){

  var newObj = {};
  var valueMax = 0;
  var  currentValue = 0;

  for(var i=0; i < arr.length; i++){
  var key = arr[i].length;
  for(var z=0; z < arr.length; z++){
    if (arr[z].length === arr[i].length){
      currentValue ++;
      if (currentValue > valueMax){
        valueMax = currentValue;
      }
    }
  }
  newObj.key = "valueMax";
}
return newObj;
}
您可以只使用数组来完成输出

函数字符计数数组{ return array.reduce agg,cur=>{ //获取当前项的长度 const len=当前长度; //将键索引的值增加为1如果不存在,则从0开始 agg[len]=agg[len]| | 0+1; //返回迭代的下一个值 返回agg; }, {}; } console.log characterCount['apple','berry','cherry'] 您可以只使用数组来完成输出

函数字符计数数组{ return array.reduce agg,cur=>{ //获取当前项的长度 const len=当前长度; //将键索引的值增加为1如果不存在,则从0开始 agg[len]=agg[len]| | 0+1; //返回迭代的下一个值 返回agg; }, {}; } console.log characterCount['apple','berry','cherry'] 看看Array.prototype.reduce函数。这允许您获取一个数组,对每个值进行迭代,并返回一个新的缩减值

函数特征CountArr{ 返回arr.reducecounts,str=>{ …很重要, [str.length]:计数[str.length]| | 0+1 }, {}; } 常量计数=字符计数['apple'、'berry'、'cheery']; 控制台。日志计数 看看Array.prototype.reduce函数。这允许您获取一个数组,对每个值进行迭代,并返回一个新的缩减值

函数特征CountArr{ 返回arr.reducecounts,str=>{ …很重要, [str.length]:计数[str.length]| | 0+1 }, {}; } 常量计数=字符计数['apple'、'berry'、'cheery'];
控制台。日志计数 使用reduce可以说更好,但这里有一个更直接的方法

函数特征CountArr{ const countByLength={}; 对于arr的let项目{ countByLength[item.length]=countByLength[item.length]| | 0+1; } 返回countByLength; }
console.logcharacterCount['apple','berry','cherry'] 使用reduce可以说更好,但这里有一个更直接的方法

函数特征CountArr{ const countByLength={}; 对于arr的let项目{ countByLength[item.length]=countByLength[item.length]| | 0+1; } 返回countByLength; }
console.logcharacterCount['apple','berry','cherry'];对于一个JS学生来说,基于任务的ES6+有点极端,但它看起来确实很酷。非常感谢!我得进一步研究这个方法@user1514042-同意,这可能超出了他们目前的理解,但这是IMO的最佳解决方案。这是一个单行程序,但不是最佳的,因为您反复复制计数数组,所以它实际上取决于所使用的不同字长there@Icepickle,你说得对。与嵌套for循环相比,更优化的术语可能更好。我已经使用Object.assign添加了一个替代答案,这缓解了复制问题。对于JS学生来说,这是一个基于任务的极端ES6+,但看起来确实很酷。非常感谢!我得进一步研究这个方法@user1514042-同意,这可能超出了他们目前的理解,但这是IMO的最佳解决方案。这是一个单行程序,但不是最佳的,因为您反复复制计数数组,所以它实际上取决于所使用的不同字长there@Icepickle,你说得对。与嵌套for循环相比,更优化的术语可能更好。我已经使用Object.assign添加了一个替代答案,它缓解了复制问题。