簡體   English   中英

將javascript關聯數組轉換為多對象數組

[英]convert javascript Associative Array to multi object array

這是我的輸入:

輸入可能會收到更多數據,例如'e:5'

  var input = {a:2,b:3,c:2,d:1};

我想將此輸入轉換為以下輸出:

var output = [{name="a",id="2"},
              {name="b",id="3"},
              {name="c",id="2"},
              {name="d",id="1"}];

提前致謝。

Object.keys使用Array#map

Object.keys()方法返回給定對象自己的可枚舉屬性的數組。


map()方法創建一個新數組,並對該數組中的每個元素調用提供的函數。


 var input = { a: 2, b: 3, c: 2, d: 1 }; var mapped = Object.keys(input).map(function(key) { return { name: key, id: input[key] }; }); console.log(mapped); 

Object.keys上可以使用Array#forEach

 var input = {a:2,b:3,c:2,d:1}; var output = []; Object.keys(input).forEach(function(key){ output.push({name:key,id:input[key]}); }) console.log(output); 

Javascript對象屬性是無序的。 因此,不確定從Object.keys返回的鍵順序。 為了像您的示例一樣保持字母順序,您需要預先sort鍵進行sort ,然后使用map創建具有期望值的新數組。

我不喜歡ES5。 這是我的ES6答案。

Object.keys(input).sort((a, b) => a.localeCompare(b)).map(name => ({name, id: input[name]}));

只是出於娛樂和培訓目的,我們可能會提出這個建議。 請記住,盡管以后可以添加,但是您始終可以在實例化時通過構造函數嵌入Symbol.iterator方法,並且默認情況下您的對象變得可迭代。

 var input = {a:2,b:3,c:2,d:1}, output = []; input[Symbol.iterator] = function*(){ var ok = Object.keys(this), i = 0; while (i < ok.length) yield {[ok[i]]: this[ok[i++]]}; }; for (var keyValuePair of input) output.push(keyValuePair); console.log(output); // or you can even do like output.length = 0; output = [...input]; // cool console.log(output); 

您也可以嘗試以下方法:

var input = {a:2,b:3,c:2,d:1};

var output = Object.keys(input).reduce(function(p, c){
     return p.concat({name:c, id:input[c]});
}, []);

暫無
暫無

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

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