javascript - 对数组对象进行分组,使具有相似键的对象不会放入同一组中

标签 javascript arrays

我有以下名为“cars”的数组。我想对数据进行分组,以便具有相似键的对象不会放入组(数组)中。

var cars = [
{
    'make': 'audi',
    'model': 'r8',
    'year': '2012'
}, {
    'make': 'audi',
    'model': 'rs5',
    'year': '2013'
}, {
    'make': 'ford',
    'model': 'mustang',
    'year': '2012'
}, {
    'make': 'ford',
    'model': 'fusion',
    'year': '2015'
}, {
    'make': 'kia',
    'model': 'optima',
    'year': '2012'
},
];

如何对数据进行分组,以便具有相同品牌的数组对象不会放入同一组中。结果如下所示。

var cars = {
'class_1': [
    {   'make' : 'audi',
        'model': 'r8',
        'year': '2012'

    },{ 'make' : 'ford',
        'model': 'mustang',
        'year': '2012'
    },{
        'make': 'kia',
        'model': 'optima',
        'year': '2012'
      }
],


'class_2': [
    {
        'make' : 'audi',
        'model': 'rs5',
        'year': '2013'
    },{
        'make': 'ford',
        'model': 'fusion',
        'year': '2015'
    }
]
}

最佳答案

您可以使用 Array.reduce()helper 数组对项目进行分组。 helper 数组保存每个组中的品牌。对于每个对象,您可以使用Array.findIndex() 来查找不包含make 的组。如果不存在,则创建一个新组,并更新 helper

const cars = [{"make":"audi","model":"r8","year":"2012"},{"make":"audi","model":"rs5","year":"2013"},{"make":"ford","model":"mustang","year":"2012"},{"make":"ford","model":"fusion","year":"2015"},{"make":"kia","model":"optima","year":"2012"}];

const helper = [];
const result = cars.reduce((r, o) => {
  let i = helper.findIndex((g) => !g[o.make]);
  if(i === -1) {
    i = helper.push({ [o.make]: true });
    r[`class_${i}`] = [o];
  } else {
    r[`class_${i + 1}`].push(o);
    helper[i][o.make] = true;
  }
    
  return r;
}, Object.create(null));

console.log(result);

关于javascript - 对数组对象进行分组,使具有相似键的对象不会放入同一组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883239/

相关文章:

javascript - 如何在 d3 map 中鼠标悬停时显示属性文本

javascript - PHP/Javascript/HTML5 canvas - 加载外部图像

ios - 将由字符串组成的数组中的字符设置为 Int?

javascript - React Promise 代码需要更改 json 值

java - 包含不同对象类的一个数组

javascript - 滚动到顶部可见性

javascript - JQuery 表排序器 : Have column show as another is sorted

javascript - 如何在 Node/Angular 应用程序中存储或检索嵌入代码?

c++ - 一个数组中的 Char 和 Int

java - 使用子字符串的数组中元素的索引