根据数组中 JSON 对象的键将 JSON 数组转换为映射
我正在尝试根据数组中 JSON 元素的属性将 JSON 数组转换为 map 。
这是 JSON 数组的结构:
[
{"property1": "x","property2": "value1","property3": "value1"},
{"property1": "x","property2": "value2","property3": "value2"},
{"property1": "y","property2": "value3","property3": "value3"},
{"property1": "y","property2": "value4","property3": "value4"}
]
我想将 JSON 数组拆分成这样的映射:
{
"x": [{"property2": "value1","property3": "value1"},
{"property2": "value2","property3": "value2"}],
"y": [{"property2": "value3","property3": "value3"},
{"property2": "value4","property3": "value4"}]
}
我如何使用 Javascript 执行此操作?
(附言:我对 Javascript 完全陌生)
最佳答案
JavaScript 有 Map
对于 map ,所以你可以这样做:
const data = [{"property1": "x","property2": "value1","property3": "value1"},{"property1": "x","property2": "value2","property3": "value2"},{"property1": "y","property2": "value3","property3": "value3"},{"property1": "y","property2": "value4","property3": "value4"}];
const map = new Map(data.map(o => [o.property1, []]));
data.forEach(({property1, ...rest}) => map.get(property1).push(rest));
const result = Object.fromEntries(map);
console.log(result);
最后的赋值转换了 Map
到一个普通对象,以防您不喜欢使用 map 。
ES5
Map
、箭头函数、对象字面量扩展语法等在 ES5 中不可用。在那个版本的 JavaScript 中,你会这样做:
const data = [{"property1": "x","property2": "value1","property3": "value1"},{"property1": "x","property2": "value2","property3": "value2"},{"property1": "y","property2": "value3","property3": "value3"},{"property1": "y","property2": "value4","property3": "value4"}];
var map = {}
data.forEach(function (o) {
var cpy = Object.assign({}, o);
delete cpy.property1;
map[o.property1] = (map[o.property1] || []).concat(cpy);
});
console.log(map);
关于javascript - 根据对象的属性将对象数组转换为散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56211634/