增加对象中的值
Incrementing a value in an object
我正在寻找给定数组的模式。到目前为止,我采用的方法是将数组缩减为对象键,并将每个键值设置为零。现在我想再次扫描数组,并为数组中元素的每次出现将值递增 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]));
哪个returns:
{ '0': 1, '1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '9': 1 }
将 '6': 1
更改为 '6': 2
我缺少什么?
任何指导表示赞赏。仍在掌握事物的窍门,愿意接受任何建议或反馈。谢谢!
您的代码中的错误(如@Pointy 所述)是比较 reducer[key] === arr[i]
应该是 if (key === arr[i]) {
。由于您使用的是严格相等 (===
),因此您需要将 key
转换为数字,或者改用相等 (==
) 运算符。
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 (+key === arr[i]) {
reducer[key]++;
}
}
}
return reducer;
};
console.log(mode([6, 2, 3, 4, 9, 6, 1, 0, 5]));
但是,您正在做一些多余的工作,因为您可以在将数组缩减为对象时计算出现的次数:
const mode = function(arr) {
return arr.reduce((accumulator, currentValue) => {
accumulator[currentValue] = (accumulator[currentValue] ?? 0) + 1;
return accumulator;
} , {});
};
console.log(mode([6,2,3,4,9,6,1,0,5]));
我正在寻找给定数组的模式。到目前为止,我采用的方法是将数组缩减为对象键,并将每个键值设置为零。现在我想再次扫描数组,并为数组中元素的每次出现将值递增 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]));
哪个returns:
{ '0': 1, '1': 1, '2': 1, '3': 1, '4': 1, '5': 1, '6': 1, '9': 1 }
将 '6': 1
更改为 '6': 2
我缺少什么?
任何指导表示赞赏。仍在掌握事物的窍门,愿意接受任何建议或反馈。谢谢!
您的代码中的错误(如@Pointy 所述)是比较 reducer[key] === arr[i]
应该是 if (key === arr[i]) {
。由于您使用的是严格相等 (===
),因此您需要将 key
转换为数字,或者改用相等 (==
) 运算符。
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 (+key === arr[i]) {
reducer[key]++;
}
}
}
return reducer;
};
console.log(mode([6, 2, 3, 4, 9, 6, 1, 0, 5]));
但是,您正在做一些多余的工作,因为您可以在将数组缩减为对象时计算出现的次数:
const mode = function(arr) {
return arr.reduce((accumulator, currentValue) => {
accumulator[currentValue] = (accumulator[currentValue] ?? 0) + 1;
return accumulator;
} , {});
};
console.log(mode([6,2,3,4,9,6,1,0,5]));