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

标签 javascript arrays json

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

相关文章:

c++ - 为什么堆栈中没有可变大小的数组?

android - 从 Google Application Engine 创建 JSON 响应

java - 将元素插入排序列表

php - 如何使用 PHP 或 Mysql 或 Laravel 优化将 12K 的 JSON 插入数据库

javascript - 尝试从 api 获取 json 数据时的 Cordova 安全策略

javascript - jquery以编程方式重新选择multselect不会重新选择

javascript - Browserify 中的 require.context() 等效项

javascript - 使用异步/等待延迟强制请求之间的时间

Javascript谷歌可视化API表撤消排序

ios - 使用 UITableView 和数组无限滚动