Javascript将数组过滤到新数组中

标签 javascript arrays

所以我有这些数据:

const data = [
  {  
    product_name: 'BMW',
    year: '1982'
  },
  {
    product_name: 'BMW',
    year: '1998'
  },
  {
    product_name: 'LandRover',
    year: '1982'
  },
  {
    product_name: 'BMW',
    year: '1982'
  },
  {
    product_name: 'LandRover',
    year: '1985'
  },
  {
    product_name: 'LandRover',
    year: '1981'
  }
]

使用普通的 javascript,我需要将数据过滤到这样的数组中:

[
  {
    name: 'BMW',
    data: [1982, 1998, 1982]
  },
  {
    name: 'LandRover',
    data: [1982, 1985, 1981]
  }
]

有人可以帮忙吗?不确定解决这个问题的最佳方法。

非常感谢

最佳答案

您可以reduce将数据发送到Map ,得到Map values iterator ,然后 spread它到一个数组:

const data = [{"product_name":"BMW","year":"1982"},{"product_name":"BMW","year":"1998"},{"product_name":"LandRover","year":"1982"},{"product_name":"BMW","year":"1982"},{"product_name":"LandRover","year":"1985"},{"product_name":"LandRover","year":"1981"}];

const result = [...data.reduce((m, o) => {
  // if map doesn't have the product_name, init the object and add to map
  m.has(o.product_name) || m.set(o.product_name, {
    name: o.product_name,
    data: []
  });

  // get the product object, and add the year
  m.get(o.product_name).data.push(o.year);

  return m;
}, new Map()).values()]; // get the map values, and spread to an array

console.log(result);

关于Javascript将数组过滤到新数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47790878/

相关文章:

PHP 获取数组中的所有数字/匿名键

php - 如何在 php 中获取重复的多维数组

javascript - 如何向 gstatic loader.js 谷歌图表库添加回调?

javascript - JS获取存储在var中的输入值/名称

java - 如何将 Vector<Vector<String>> 转换为 Object[][]?

JavaScript 循环太慢

javascript - 如何移动数组中的一组项目?

javascript - 如何使用 Jquery 中的 onclick 按钮在多个 div 上使用显示和隐藏

javascript - 当浏览器关闭时,是否有一种可靠的方法来注销用户?

javascript - 尝试查找数组是否已满