JS reducer返回对象

时间:2020-10-01 20:56:32

标签: javascript reducers

我想从下面的代码中获得类似“ {{坐:3,站:2}”的输出,请问有什么可以帮助的吗?

 var desks = [
  { type: 'sitting' },
  { type: 'standing' },
  { type: 'sitting' },
  { type: 'sitting' },
  { type: 'standing' }
];

var deskTypes = desks.reduce(function() {
    //Acutal code.
}, { sitting: 0, standing: 0 });

4 个答案:

答案 0 :(得分:2)

您可以这样做。确保每次迭代后返回types累加器对象。

const desks = [
    { type: 'sitting' },
    { type: 'standing' },
    { type: 'sitting' },
    { type: 'sitting' },
    { type: 'standing' },
]

const deskTypes = desks.reduce((types, desk) => {
    types[desk.type]++
    
    return types
}, { sitting: 0, standing: 0 })

console.log(deskTypes)

答案 1 :(得分:1)

只需使用Array.reduce即可完成。

const desks = [
  { type: 'sitting' },
  { type: 'standing' },
  { type: 'sitting' },
  { type: 'sitting' },
  { type: 'standing' }
];

const result = desks.reduce((acc, cur) => {
  if (acc[cur.type]) {
    acc[cur.type] ++;
  } else {
    acc[cur.type] = 1;
  }
  return acc;
}, {});
console.log(result);

答案 2 :(得分:0)

let deskTypes = desks.reduce(
  (types, { type }) => {
    types[type]++;
    return types;
  },
  { sitting: 0, standing: 0 }
);

答案 3 :(得分:0)

const desks = [
  { type: "sitting" },
  { type: "standing" },
  { type: "sitting" },
  { type: "sitting" },
  { type: "standing" },
];

const deskTypes = desks.reduce(
  (acc, item) => {
    
    if (item.type === "sitting") {
      acc.sitting++;
    } else {
      acc.standing++;
    }

    return acc;
  },
  { sitting: 0, standing: 0 }
);

console.log(deskTypes);
相关问题