【发布时间】:2019-05-31 06:04:16
【问题描述】:
我得到了一个数字数组。我创建了一个名为 counts 的对象,其键是数字,值是这些数字在数组中出现的次数。无法弄清楚如何使用 reduce 删除数字的偶数。
A = [ 20, 1, -1, 2, -2, 3, 3, 5, 5, 1, 2, 4, 20, 4, -1, -2, 5 ]
n = 5
function findOdd(A) {
let counts = {};
for (let i = 0; i < A.length; i++) {
let num = A[i];
counts[num] = counts[num] ? counts[num] + 1 : 1;
}
//counts -> { '1': 2, '2': 2, '3': 2, '4': 2, '5': 3, '20': 2, '-1': 2, '-2': 2 }
const answer = Object.keys(counts).reduce((object, key) => {
if (key % 2 !== 0) {
object[key] = counts[key];
}
return object;
}, {})
return answer;
必须返回奇数的key。
解决方案:
function findOdd(A) {
const counts = {};
for (let i = 0; i < A.length; i++) {
let num = A[i];
counts[num] = counts[num] ? counts[num] + 1 : 1;
}
Object.keys(counts).forEach(key => {
if(counts[key] % 2 === 0) {
delete counts[key];
}
});
return Number(Object.keys(counts));
}
【问题讨论】:
-
你能展示一些输入和输出的例子吗?
-
如果是数字数组,为什么不简单的
filter()? -
代码返回一个数组,其中包含键/值对和奇数计数。什么是错误/问题?
-
您应该在提问时提供您的数据。从代码来看,这是一个多维数组,其成员都与包含它们的数组一样长?
-
如何过滤并获取每个数字的计数?我创建了对象,所以键是数字,值是计数
标签: javascript object reduce