【发布时间】:2021-06-04 15:36:17
【问题描述】:
我正在寻找给定数组的模式。到目前为止,我采取的方法是将数组减少为对象键,并将每个键值设置为零。现在我想再次扫描数组,并为数组中每次出现的元素将值加 1。
我有我认为应该工作的东西,但是多次出现的键没有增加。所有值都读为 1。
到目前为止我的代码:
const mode = function(arr) {
const reducer = arr.reduce((accumulator, currentValue) => (accumulator[currentValue] = 0, accumulator), {});
for (let key in reducer) {
for (let i = 0; i < arr.length; i++) {
if (reducer[key] === arr[i]) {
reducer[key]++;
}
}
}
return reducer;
};
console.log(mode([6,2,3,4,9,6,1,0,5]));
返回:
{ '0': 1, '1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '9': 1 }
将'6': 1 更改为'6': 2 我缺少什么?
感谢任何指导。仍然掌握事情的窍门,欢迎任何建议或反馈。谢谢!
【问题讨论】:
-
应该是
if (key === arr[i]) { -
这似乎阻止了它增加任何数字。当我从
key中删除reducer时,输出更改为{ '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '9': 0 } -
键是一个字符串,所以你需要使用一元
+或parseInt等将它的大小写为一个数字...因为你使用严格比较===。跨度> -
哦,是的,错过了,你可以改用
==,但最好是明确的 -
谢谢你们!这对我来说更有意义了。感谢您的指导!
标签: javascript arrays loops javascript-objects increment