[英]Transform Nested Object Data Structure into an Array of Objects- JavaScript
[英]Transform data from an nested array to an object
我試圖改變這個:
var pets = [
[
['dog', 'Harry'], ['age', 2]
],
[
['dog', 'Roger'], ['age', 5]
]
]
進入這個:
var dogs = [
{dog: 'Harry', age: 2},
{dog: 'Roger', age: 5}
]
我一直卡住了。 這是我到目前為止所做的。 任何指向正確方向的指針都將非常感激。 任何有關使其更具可讀性的建議對我來說也會有所幫助。 謝謝
function arrayToObj(arr) {
var newArray = [];
for (var i = 0; i < arr.length; i++) {
var obj = {};
for (var j = 0; j < arr[i].length; j++) {
var key = arr[i][j][0];
obj[key] = key;
}
newArray[i] = obj;
}
return newArray;
}
您可以使用Array#map
和Array#reduce
方法。
var pets = [ [ ['dog', 'Harry'], ['age', 2] ], [ ['dog', 'Roger'], ['age', 5] ] ]; var dogs = pets.map(function(v) { // iterate over the array return v.reduce(function(obj, arr) { // iterate over inner array to generate object obj[arr[0]] = arr[1]; // define object property based on inner array element return obj; // return updated object }, {}); // set initial value as an empty object }) console.log(dogs);
僅供參考:如果您想堅持自己的代碼,那么您需要更新行obj[key] = key;
用obj[key] = arr[i][j][1];
或者根本不需要key
變量使用單行代碼作為obj[arr[i][j][0]] = arr[i][j][1];
。
var pets = [ [ ['dog', 'Harry'], ['age', 2] ], [ ['dog', 'Roger'], ['age', 5] ] ]; function arrayToObj(arr) { var newArray = []; for (var i = 0; i < arr.length; i++) { var obj = {}; for (var j = 0; j < arr[i].length; j++) { obj[arr[i][j][0]] = arr[i][j][1]; // updated here ------^^^^^^^---- } newArray[i] = obj; } return newArray; } var dogs = arrayToObj(pets); console.log(dogs);
這是Map
構造函數可以自動執行的操作:
var dogs = pets.map(pairs => new Map(pairs))
function arrayToObj(arr) {
return arr.map((item) => {
var object = {};
item.forEach((data) => {
object[data[0]] = data[1];
})
return object
})
}
var pets = [ [ ['dog', 'Harry'], ['age', 2] ], [ ['dog', 'Roger'], ['age', 5] ] ] var petArr = pets.reduce(function(a, b) { var obj = {} b.forEach(function(set){ obj[set[0]] = set[1] }) return a.concat(obj) }, []) console.log(petArr)
改變obj[key] = arr[i][j][1];
而不是obj[key] = key
我可以用map和其他數組方法完成,但我想表明你錯了。
var pets = [ [ ['dog', 'Harry'], ['age', 2] ], [ ['dog', 'Roger'], ['age', 5] ] ]; var a=function arrayToObj(arr) { var newArray = []; for (var i = 0; i < arr.length; i++) { var obj = {}; for (var j = 0; j < arr[i].length; j++) { var key = arr[i][j][0]; obj[key] = arr[i][j][1]; // change here instead of key } newArray[i] = obj; } return newArray; } console.log(a(pets));
我希望以下腳本可以幫到你。
function arrayToObj(arr) {
var newArray = [];
for (var i = 0; i < arr.length; i++) {
var obj = {
dog: '',
age: ''
};
obj.dog = arr[i][0][1];
obj.age = arr[i][1][1];
newArray.push(obj);
}
return newArray;
}
你可以使用一個簡單的
for()
循環嵌套在forEach()
循環中來獲得你想要的結果。 在這里快速測試
var pets = [ [ ['dog', 'Harry'], ['age', 2] ], [ ['dog', 'Roger'], ['age', 5] ] ]; function arrayToObject(arrData) { var objData = []; arrData.forEach(function(data, index) { var tmpObject = {}; for (var i = 0; i < data.length; i++) { var arr = data[i]; tmpObject[arr[0]] = arr[1]; } objData.push(tmpObject); }); return objData; } console.log( arrayToObject(pets) );
// YIELDS::
Array[2]
0: Object
age: 2
dog: "Harry"
1: Object
age: 5
dog: "Roger"
</script>
您可以將值作為屬性分配給數組,將數組長度設置為零,並將數組類型轉換為普通對象,並將其分配給同一元素。
var pets = [[['dog', 'Harry'], ['age', 2]], [['dog', 'Roger'], ['age', 5]]]; pets.forEach(function (a, i, aa) { a.forEach(function (b, _, bb) { bb[b[0]] = b[1]; }); a.length = 0; aa[i] = Object.assign({}, aa[i]); }); console.log(pets);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.