javascript - 使用另一个对象的键从对象数组创建新数组

标签 javascript arrays object ecmascript-6

我有一组对象“汽车”

let cars = [
{id: 1, name: 'Mercedes', year: '2015'},
{id: 2, name: 'Mercedes', year: '2000'},
{id: 3, name: 'BMW', year: '2010'},
{id: 4, name: 'BMW', year: '2004'},
{id: 4, name: 'BMW', year: '2004'},
{id: 4, name: 'BMW', year: '2004'},
{id: 4, name: 'BMW', year: '2004'},
{id: 4, name: 'BMW', year: '2004'},
{id: 5, name: 'Volvo', year: '2012'},
{id: 6, name: 'Volvo', year: '2014'},
{id: 7, name: 'Volvo', year: '2010'},
{id: 8, name: 'Toyota', year: '2012'},
{id: 8, name: 'Jeep', year: '2011'},
];

以及一个包含汽车数量的对象

let obj = {
BMW: 6,
Jeep: 1,
Mercedes: 2,
Toyota: 1,
Volvo: 3,
}

我需要从汽车创建新数组,其中只有一份对象副本,并将“数量”属性添加到适当的对象。我怎样才能实现这个目标?

预期输出。

newArray = [
    {id: 1, name: 'Mercedes', year: '2015', quantity: 2},
    {id: 3, name: 'BMW', year: '2010', quantity: 6},
    {id: 5, name: 'Volvo', year: '2012', quantity: 3},
    {id: 8, name: 'Toyota', year: '2012', quantity: 1},
    {id: 8, name: 'Jeep', year: '2011', quantity: 1},
]

最佳答案

可以使用数组和哈希表直接进行计数。

let cars = [{ id: 1, name: 'Mercedes', year: '2015' }, { id: 2, name: 'Mercedes', year: '2000' }, { id: 3, name: 'BMW', year: '2010' }, { id: 4, name: 'BMW', year: '2004' }, { id: 4, name: 'BMW', year: '2004' }, { id: 4, name: 'BMW', year: '2004' }, { id: 4, name: 'BMW', year: '2004' }, { id: 4, name: 'BMW', year: '2004' }, { id: 5, name: 'Volvo', year: '2012' }, { id: 6, name: 'Volvo', year: '2014' }, { id: 7, name: 'Volvo', year: '2010' }, { id: 8, name: 'Toyota', year: '2012' }, { id: 8, name: 'Jeep', year: '2011' }],
    result = Object.values(cars.reduce((r, o) => {
        r[o.name] = r[o.name] || { ... o, quantity: 0 };
        r[o.name].quantity++;
        return r;
    }, []));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 使用另一个对象的键从对象数组创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62451760/

相关文章:

将 C 字符串转换为二进制值数组,然后逐位传输数组

javascript - 我无法将字符串转换为 JavaScript 对象

java - Android Socket 将对象转换为ArrayList

javascript - 让这些箭头滚动? jquery 和 html

javascript - 重命名jstree节点问题

javascript - 嵌入式对象后面的 jquery 组合框(仅限 IE)

java - 返回数组的简单方法

java - 如果行和列中的所有元素都相同,如何检查二维数组?

objective-c - 什么是自动释放池?

javascript - 如何处理 IE 错误