javascript - 如何在 JavaScript 中为对象值添加标签

标签 javascript arrays object group-by

我有一个按索引分组的对象数组,想要重构并向响应添加标签。

这是我的原始数组:

let cars = [{'make': 'audi', 'model': 'RS3', 'transmition': 'automatic'}, {'make': 'audi', 'model': 'RS7', 'transmition': 'dual-clutch'}, {'make': 'bmw', 'model': '325is', 'transmition': 'manual'}, {'make': 'bmw', 'model': 'M2', 'transmition': 'dual-clutch'}]

这是用于通过make对数组进行分组的源代码:

var groupedByMake = _.groupBy(
          cars,
          "make"
        );

响应如下所示:

{
  'audi':[{'model': 'RS3', 'transmition': 'automatic'}, {'model': 'RS7', 'transmition': 'dual-clutch'}],
  'bmw':[{'model': '325is', 'transmition': 'manual'}, {'model': 'M2', 'transmition': 'dual-clutch'}]
}

我想要的结果应该是这样的:

[{
  'make': 'audi',
   'types': [{'model': 'RS3', 'transmition': 'automatic'}, {'model': 'RS7', 'transmition': 'dual-clutch'}]
  },{
  'make': 'bmw',
  'types': [{'model': '325is', 'transmition': 'manual'}, {'model': 'M2', 'transmition': 'dual-clutch'}]
}]

这可以使用 JavaScript 实现吗?如果是这样,我可以获得帮助来完成这项任务。

最佳答案

您可以使用array.reduce将一个数组转换为另一个数组并控制是返回新元素还是在现有数组中累积值 (prev):

let cars = [{'make': 'audi', 'model': 'RS3', 'transmition': 'automatic'}, {'make': 'audi', 'model': 'RS7', 'transmition': 'dual-clutch'}, {'make': 'bmw', 'model': '325is', 'transmition': 'manual'}, {'make': 'bmw', 'model': 'M2', 'transmition': 'dual-clutch'}];

let output = cars.reduce((acc, cur) => {
    let {make, ...obj} = cur;    
    let prev = acc.find(x => x.make === make);
    if(!prev) {
      acc.push({make,types:[obj]})
    } else {
      prev.types.push(obj);
    }
    return acc;
}, []);

console.log(output);

关于javascript - 如何在 JavaScript 中为对象值添加标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71076394/

相关文章:

javascript - 检测不同语言的联系号码

PHP:从 array_values() 中的值中剥离标签

C++ 对象和内存分配

C++ 将基类和派生类对象存储在一起

Javascript 数组在重新加载时重置

javascript - 使用具有 !important 标签的 jquery 更改 div 的背景颜色

javascript - Javascript 正则表达式中的非捕获组

php - 使用 php 从 db 检索输入并具有不同的 css 类

C: printf 不打印用户输入的答案

c++ - 尝试删除对象时检测到堆损坏 (C++)