2017-02-20 71 views
1

列表(沒有額外的陣列)使用Array of array to object - javascriptConvert an array to an array of objects作爲引導我試圖寫導致 採取這一數組的數組列表的一個函數:陣列的陣列的反對在輸出

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]]; 

和轉換它轉換成:

{ 
    name : 'Sparky' 
    breed : 'lab', 
    age : 4 
} 

然而,當我運行下面的代碼:

var list = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
function toObjects(data) { 
 
    var keys = data.shift(), 
 
    i = 0, 
 
    k = 0, 
 
    obj = null, 
 
    output = []; 
 

 
    for (i = 0; i < data.length; i++) { 
 
    obj = {}; 
 

 
    for (k = 0; k < keys.length; k++) { 
 
     obj[keys[k]] = data[i][k]; 
 
    } 
 

 
    output.push(obj); 
 
    } 
 

 
    return output; 
 
} 
 
var data = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
console.log(toObjects(data))

我得到這個:

console.log(toObjects(data)); //=> 

[ { name: 'breed', Sparky: 'lab' },{ name: 'age', Sparky: 4 } ] 

,但我需要的輸出沒有額外的數組[]和也被列出單獨的文件是這樣的:

 { 
      name : 'Sparky' 
      breed : 'lab', 
      age : 4 
     } 

任何建議?謝謝,麻煩您了!

+0

然後定義'output'爲'{}'和'而不是OBJ [..] [..]''做輸出[...] [..]' – Rajesh

+0

你不能'list.reduce((accu,curVal)=> {accu [curVal [0]] = curVal [1]; return accu;},{})' ? – Li357

回答

2

我會用Array.prototype.reduce來執行轉換以及參數destructing。看一看,代碼非常簡單:)

let list = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
function toObjects(data) { 
 
    // reduce iterates through every element in the `data` array 
 
    // and accumulates it into the object 
 

 
    let initialValue = {}; 
 
    return data.reduce((obj, [key, value]) => { 
 
    obj[key] = value; 
 
    return obj; 
 
    }, initialValue); // this could be in-lined with `{}` 
 
} 
 

 
var data = [ 
 
    ['name', 'Sparky'], 
 
    ['breed', 'lab'], 
 
    ['age', 4] 
 
]; 
 

 
console.log(toObjects(list))

+1

@Rajesh我只是想說一些東西來顯示發生了什麼。我會再次重命名 –

+0

謝謝@Rico,這就是我一直在尋找的! – learninghowtocode

+0

感謝大家的幫助!欣賞它! – learninghowtocode

0

您可以使用地圖功能來實現這個

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]]; 
 
var newObj = new Object(); 
 
list.forEach(function (arr) { 
 
    newObj[arr[0]] = arr[1]; 
 
}); 
 

 
console.log(newObj)

+0

我不認爲OP正在尋找替代品。這個問題的對象是將輸出作爲對象而不是數組。 – Rajesh

+0

Downvote因爲您使用'Array.map'而不返回任何內容並進行分配。這只是浪費'Array.map'。如果你只是想處理數組,使用'Array.forEach' – Rajesh

+0

'newObj [arr [0]] = arr [1];'在'map'中使用。 – Mairaj