我正在尝试修改一个对象数组,以基于对键值进行分组来分解为嵌套的对象数组。
这是初始数据格式的一个示例:
[
{key: "Toyota", color: "red", cost: 100 },
{key: "Toyota", color: "green", cost: 200 },
{key: "Chevrolet", color: "blue", cost: 300 },
{key: "Honda", color: "yellow", cost: 400 },
{key: "Datsun", color: "purple", cost: 500 }
]
这是我想要输出的输出:
[{
key: "Toyota",
values: [
{color: "red", cost: 100 },
{color: "green", cost: 200 }
]
}, {
key: "Chevrolet",
values: [
{color: "blue", cost: 300 }
]
},{
key: "Honda",
values: [
{color: "yellow", cost: 400 }
]
},{
key: "Datsun",
values: [
{color: "puruple", cost: 500 }
]
}]
到目前为止,我已经在这些解决方案上取得了一些成功(主要是使用lodash中的_.map
+ _.groupBy
解决方案),这有助于将数据拆分为父级 - >儿童格式。我目前仍然在根据值和键进行分组时遇到一些麻烦。
Group array of object nesting some of the keys with specific names
当前数据格式如下所示:
[{
key: "Toyota",
values: [
{color: "red", cost: 100 },
]
},{
key: "Toyota",
values: [
{color: "green", cost: 200 }
]
}, {
key: "Chevrolet",
values: [
{color: "blue", cost: 300 }
]
},{
key: "Honda",
values: [
{color: "yellow", cost: 400 }
]
},{
key: "Datsun",
values: [
{color: "puruple", cost: 500 }
]
}]
非常感谢任何帮助。谢谢!
答案 0 :(得分:0)
您可以使用Map
而无需其他库。
(这是我对单个嵌套重新引用的引用问题的原始答案。问题有一个嵌套方法,有多个级别的深度,这里没有给出。)
var items = [{ key: "Toyota", color: "red", cost: 100 }, { key: "Toyota", color: "green", cost: 200 }, { key: "Chevrolet", color: "blue", cost: 300 }, { key: "Honda", color: "yellow", cost: 400 }, { key: "Datsun", color: "purple", cost: 500 }],
map = new Map,
result;
items.forEach(({ key, color, cost }) => {
map.has(key) || map.set(key, { key, values: [] });
map.get(key).values.push({ color, cost });
});
result = [...map.values()];
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }