gpt4 book ai didi

javascript - 根据对象的属性将对象数组转换为散列

转载 作者:行者123 更新时间:2023-11-30 19:33:22 25 4
gpt4 key购买 nike

根据数组中 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com