如何在 javascript 中比较和更新数组数据



我有一个水果数组,它有以下元素

var fruits = ['Mango','Orange', 'Banana', 'Mango', 'Grapes', 'Orange', 'Apple', 'Apple', 'Banana', 'Mango']

我想生成一个对象数组的输出,它可以是

result = [{fruit : 'Mango', Count : 3}, {fruit : 'Orange', Count : 2}, {fruit : 'Banana', Count : 2},{fruit : 'Grapes', Count : 1}, {fruit : 'Apple', Count : 2}]

我怎样才能实现相同的目标?

使用 reduce 创建一个以键作为水果名称的对象。如果键已经存在,则 count 将创建一个具有属性 fruitcount 的对象,初始化为零。

const fruits = ['Mango', 'Orange', 'Banana', 'Mango', 'Grapes', 'Orange', 'Apple', 'Apple', 'Banana', 'Mango'];
const output = Object.values(fruits.reduce((a, fruit) => {
  if (!a[fruit]) {
    a[fruit] = {
      fruit,
      count: 0
    };
  }
  a[fruit].count += 1;
  return a;
}, {}));
console.log(output);

首先在 reduce(( 的帮助下计算单个水果的计数,最后通过 map(( 将该单个计数转换为预期的对象。

const fruits = ['Mango','Orange', 'Banana', 'Mango', 'Grapes', 'Orange', 'Apple', 'Apple', 'Banana', 'Mango']
const count = Object.values(fruits.reduce((old, cur) => (old[cur] = old[cur] || {fruit: cur, count: 0}, old[cur].count++, old), {}))
console.log(count)

试试这个:

const fruits = ['Mango', 'Orange', 'Banana', 'Mango', 'Grapes', 'Orange', 'Apple', 'Apple', 'Banana', 'Mango'];
const rst = Object.values(fruits.reduce((acc, ele) => (acc[ele] = {fruit: ele, count: (((acc[ele]||[])['count'])+=1) ||0}, acc),[]));
console.log(rst)

相关内容

  • 没有找到相关文章

最新更新