我有以下数组结构:
const values = [{
"region": "US", "content": "content 1", "value": "value1"
}, {
"region": "US", "content": "content 2", "value": "value2"
}, {
"region": "US", "content": "content 3", "value": "value3"
}, {
"region": "LA", "content": "content 4", "value": "value4"
}, {
"region": "LA", "content": "content 5", "value": "value5"
}, {
"region": "LA", "content": "content 6", "value": "value6"
}, {
"region": "LA", "content": "content 7", "value": "value7"
}]
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其转换为以下内容 - 请注意,region密钥已从输出数组内的结果对象中消失:
const output = [{
"US": [
{"content": "content 1", "value": "value1"},
{"content": "content 2", "value": "value2"},
{"content": "content 3", "value": "value3"}
],
"LA": [
{"content": "content 4", "value": "value4"},
{"content": "content 5", "value": "value5"},
{"content": "content 6", "value": "value6"},
{"content": "content 7", "value": "value7"}
]
}]
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我尝试过的:
let outputValues = [];
values.forEach(currentElement => {
outputValues[currentElement.region].push(currentElement);
})
console.log(outputValues);
Run Code Online (Sandbox Code Playgroud)
上述解决方案给我以下错误:
未捕获的类型错误:无法读取未定义的属性(读取“push”)
不知道为什么。
我也尝试过:
# 1st option
outputValues[currentElement.region] = currentElement;
# 2nd option
outputValues[currentElement.region] = [];
outputValues[currentElement.region].push(currentElement);
Run Code Online (Sandbox Code Playgroud)
但这仅添加主values数组中的最后一个元素。我在这里缺少什么?
如果不想保留原来的对象,可以将不需要的键作为分组值,并在分组时删除该属性。
const
values = [{ region: "US", content: "content 1", value: "value1" }, { region: "US", content: "content 2", value: "value2" }, { region: "US", content: "content 3", value: "value3" }, { region: "LA", content: "content 4", value: "value4" }, { region: "LA", content: "content 5", value: "value5" }, { region: "LA", content: "content 6", value: "value6" }, { region: "LA", content: "content 7", value: "value7" }],
result = Object.groupBy(values, o => {
const group = o.region;
delete o.region;
return group;
});
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
不改变数据和不改变数据的解决方案groupBy:
const
values = [{ region: "US", content: "content 1", value: "value1" }, { region: "US", content: "content 2", value: "value2" }, { region: "US", content: "content 3", value: "value3" }, { region: "LA", content: "content 4", value: "value4" }, { region: "LA", content: "content 5", value: "value5" }, { region: "LA", content: "content 6", value: "value6" }, { region: "LA", content: "content 7", value: "value7" }],
result = values.reduce((r, { region, ...o}) => {
(r[region] ??= []).push(o);
return r;
}, {});
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)