将数组转换为键值对

9

我有一个数组

[
{"field" : "flight1", "value" : "123"},
{"field" : "flight2", "value" : "456"}
]

是否有可能成为键值对?

{
"flight1" : "123",
"flight2" : "456"
}
5个回答

20

您可以使用reduce()函数并将对象作为结果返回。

var arr = [{"field" : "flight1", "value" : "123"},{"field" : "flight2", "value" : "456"}]

var result = arr.reduce(function(r, e) {
  r[e.field] = e.value;
  return r;
}, {});

console.log(result)


3
请为r和e添加一些有意义的名称,这并没有真正解释它们的作用。例如:arr.reduce(function(accumulator, currentValue){} - Sytham
我认为我更喜欢这种简写方式,它在逻辑上更容易理解:Object.fromEntries(data.map(obj => [obj.field, obj.value])); - Simon East

3
< p > new Map() 构造函数可以为您完成此操作:

var data = [
    {"field": "flight1", "value": "123"},
    {"field": "flight2", "value": "456"}
];
var result = new Map(data.map(obj => [obj.field, obj.value]));

如果您不熟悉Map对象,它们几乎与普通对象完全相同,只是稍微易于迭代,并且具有.size属性。
但是,如果您更喜欢普通对象,则可以通过以下方式获得:
var result = Object.fromEntries(data.map(obj => [obj.field, obj.value]));

感谢您的有益回答。我希望您不介意我扩展了它,以类似的方式包含获取普通对象的示例。 - Simon East

2
你可以将键值对进行映射并将其赋值给一个对象。

var data = [{ field: "flight1", value: "123" }, { field: "flight2", value: "456" }],
    result = Object.assign(...data.map(a => ({ [a.field]: a.value })));

console.log(result);


map returns an array of objects, not a single object. The OP wants {a:1,b:2}, not [{a:1},{b:2}] - Kobi
为什么不使用 Object.fromEntries() 呢?它比你的示例要简单一些。 - Simon East

1
您可以使用标准的 for 循环:

var data = [{"field" : "flight1", "value" : "123"},{"field" : "flight2", "value" : "456"}];

var obj = {};

for (var i = 0; i < data.length; i++)
    obj[data[i].field] = data[i].value;

console.log(obj);


0
这可能会对某个人有所帮助。我尝试了以上所有示例,但每次控制台都会给我类似以下的输出: {   flight1:“123”,   flight2:“456” } 我的问题是我过早地转换了序列化的数组,导致了许多微小的问题。以下是不起作用的代码:
var data = $('#myform').serializeArray();
data = JSON.stringify(data);
data,result = Object.assign(...data.map(a => ({ [a.name]: a.value })));
database.addUser(result);

请注意,flight1和flight2失去了双引号。以下是我的解决方案:
var data = $('#myform').serializeArray();
data,result = Object.assign(...data.map(a => ({ [a.name]: a.value }))); //result was already turned into a JSON array
database.addUser(result);

注意:这是一个使用Electron框架将用户信息提交到数据库(neDB)的代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接