[英]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()
方法返回給定對象自己的可枚舉屬性的數組。
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.