如何在javascript中将键值对转换为对象

时间:2016-01-12 12:51:12

标签: javascript jquery

我有一个像这样的对象数组:

[{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}]

我需要将其转换为以下格式:

[{"fruit":"apple"},{"color":"red"},{"location":"garden"}]

使用javascript怎么可能?

5 个答案:

答案 0 :(得分:12)

您可以使用.map

var data = [
  {"key":"fruit","value":"apple"},
  {"key":"color","value":"red"},
  {"key":"location","value":"garden"}
];

var result = data.map(function (e) {
  var element = {};
  element[e.key] = e.value;
  
  return element;
});

console.log(result);

如果您使用ES2015,也可以这样做

var result = data.map((e) => {
   return {[e.key]: e.value};
});

Example

答案 1 :(得分:4)

使用箭头功能,使用名为arr

的数据
arr.map(e => {
    var o = {};
    o[e.key] = e.value;
    return o;
});

这会生成一个新的数组,并且不会修改原始

它可以简化为一行

arr.map(e => ({[e.key]: e.value}));

如果您还不能假设箭头功能支持,那么您可以编写此缩写

arr.map(function (e) {
    var o = {};
    o[e.key] = e.value;
    return o;
});

答案 2 :(得分:1)

使用地图(如其他答案所示)或以下内容可以做你想要的......

var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}];
var obj = {};

for(var i = 0; i < data.length; i++) {
  obj[data[i]["key"]] = data[i]["value"];
}

答案 3 :(得分:0)

您目前拥有的是一个对象数组,每个对象都有两个属性,键和值。如果您不了解map,则可以始终在此阵列上运行forEach循环并重新排列数据。尝试以下内容:

  function() {
     var newArray = [];
     oldArray.forEach(function(x){
     var obj= {};
     obj[x.key] = x.value;
     newArray.push(obj);
    });
  console.log(newArray);
}

这里oldArray是你的原始数据

答案 4 :(得分:0)

在Javascript中,obj.property和obj [&#39; property&#39;]返回相同的内容。 obj [&#39; property&#39;]更灵活,因为关键属性&#39;可能是一个有一些空格的字符串:

obj['pro per ty'] // work
obj.pro per ty // not work

var a = 'property';
obj.a == obj.property // => false
obj[a] == obj.property // => true

所以你可以试试。

var data = [{"key":"fruit","value":"apple"},{"key":"color","value":"red"},{"key":"location","value":"garden"}]
var new_data = [];

var data_length = data.length; // just a little optimisation for-loop
for (var i = 0; i < data_length; i++) {
    var item = data[i]; // to have a vision close of foreach-loop (foreach item of collection)
    new_data[i] = {};
    new_data[i][item.key] = item.value;
}
console.log(new_data);
// [{"fruit":"apple"},{"color":"red"},{"location":"garden"}]