如何将键值对转换为新的键值对javascript

时间:2019-09-03 10:35:50

标签: javascript arrays

您好,有人可以帮助我使用javascript。我有年龄年龄段的商店列表。

age = [5, 5, 13, 5, 13];

sumAge 来计算重复年龄。

sumAge = age.reduce((acc, datum) => {
    let count= acc[datum];
    acc[datum] = count === undefined ? 1 : ++count;
    return acc;
 }, {});

console.log(sumAge);

我想让我的结果像这样:

{
age:5,
value: 3
},
{
age:13,
value: 2
}

代替这个。

{
5: 3 ,
13: 2
}

4 个答案:

答案 0 :(得分:0)

  

我希望得到这样的结果

问题中的结构无效,除非您要使用数组。

假设您想要一个按年龄作为键的对象(但是如果您想要 想要一个数组,请继续阅读):

const age = [5, 5, 13, 5, 13];

const sumAge = age.reduce((acc, datum) => {
    let entry = acc[datum];
    if (entry) {
        ++entry.count;
    } else {
        acc[datum] = {age: datum, count: 1};
    }
    return acc;
 }, {});

console.log(sumAge);

但是,这实际上不是reduce的用例,它过于复杂。只需使用简单的for-of循环:

const age = [5, 5, 13, 5, 13];

const sumAge = {};
for (const datum of age) {
    let entry = sumAge[datum];
    if (entry) {
        ++entry.count;
    } else {
        sumAge[datum] = {age: datum, count: 1};
    }
}

console.log(sumAge);


如果您想要想要一个数组,则作为Rajesh points out,只需对结果使用Object.values

const age = [5, 5, 13, 5, 13];

const sumAge = {};
for (const datum of age) {
    let entry = sumAge[datum];
    if (entry) {
        ++entry.count;
    } else {
        sumAge[datum] = {age: datum, count: 1};
    }
}

console.log(Object.values(sumAge));

答案 1 :(得分:0)

您可以获取sumAge的条目并根据需要映射它们

let age = [5, 5, 13, 5, 13];

let sumAge = age.reduce((acc, datum) => {
    let count= acc[datum];
    acc[datum] = count === undefined ? 1 : ++count;
    return acc;
 }, {});
 
let arrAge = Object.entries(sumAge).map(([k,v])=>({age: Number(k), count: v})) 

console.log(arrAge);

答案 2 :(得分:0)

使用Object.values

let age = [5, 5, 13, 5, 13];

let sumAge = age.reduce((acc, datum) => {
  acc[datum] = acc[datum] || { age: datum, value: 0 };
  acc[datum].value += 1;
  return acc;
}, {});

console.log(Object.values(sumAge));

答案 3 :(得分:0)

我的reduce有一个空白数组作为初始值-这成为数组累加器。如果具有密钥年龄的对象在数组中,则密钥值增加1。否则,将初始密钥值为1的密钥年龄的对象添加到数组累加器。这是我的代码

const checkAge = (acc, num) => acc.find(elem => elem.age == num);

const arr = [5, 15, 5, 5, 15].reduce((acc,num) => {
    let idx = acc.indexOf(checkAge(acc, num))
    if(idx >= 0) acc[idx].value += 1;
    else acc.push({age: num, value: 1});
    return acc;


}, []);

console.log(arr); //returns [{age: 5, value: 3}, {age:13, value: 2}]