簡體   English   中英

如何將鍵值對象數組轉換為具有單個屬性的對象數組?

[英]How to convert array of key–value objects to array of objects with a single property?

我有一個像這樣的對象數組:

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

我需要將其轉換為以下格式:

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

如何使用 JavaScript 做到這一點?

您可以使用.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

使用箭頭函數,數據名為arr

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

這會生成一個新的Array並且不會修改原來的

它可以簡化為一行

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

如果你還不能假設箭頭函數支持,你會寫這個

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

使用地圖(如其他答案中所建議的)或以下將做你想做的......

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"];
}

在 Javascript 中, obj.property 和 obj['property'] 返回相同的東西。 obj['property'] 更靈活,因為鍵 'property' 可以是帶有一些空格的字符串:

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"}]

您當前擁有的是一個對象數組,每個對象都有兩個屬性,鍵和值。 如果您不知道 map,您始終可以在此數組上運行 forEach 循環並重新排列數據。 嘗試如下:

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

這里 oldArray 是你的原始數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM