簡體   English   中英

如何將嵌套數組轉換為對象

[英]How to Convert a nested array to an object

我想從僅2級深的嵌套數組中創建一個對象。 我想出的功能返回

[{ key1: 'value1', key2: 'value2' }]

而不是

[{ key1: 'value1' }, {key2: 'value2' }]

我也嘗試用obj[elem[0]] = elem[1];替換if語句obj[elem[0]] = elem[1]; 但得到相同的結果。

如何為每個嵌套數組創建單獨的對象?

var array = [["key1", "value1"], ["key2", "value2"]]

function nestedArrToObj(array){

  let obj = {};

  for (let i=0; i < array.length;i++) {
    let elem = array[i];

    if (!(obj[elem[0]])) {
      obj[elem[0]] = elem[1]
    }
  }

  return [obj];
}

使用功能map

 let array = [["key1", "value1"], ["key2", "value2"]]; let result = array.map(([key, value]) => ({[key]: value})); console.log(result) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

使用功能reduce

 let array = [["key1", "value1"], ["key2", "value2"]]; let result = array.reduce((a, c) => { let [key, value] = c; return [...a, {[key]: value}]; }, []); console.log(result) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

跨瀏覽器和后端技術兼容的方法:

 var array = [["key1", "value1"], ["key2", "value2"]]; var result = []; for(var a of array) { var value = a.pop(); var key = a.pop(); var object = {}; object[key] = value; result.push(object); } console.log(result) 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

這是map的版本:

 console.log( [["key1", "value1"], ["key2", "value2"]] .map(x => {let obj = {}; obj[x[0]] = x[1]; return obj;}) ) 

該語言的一些新功能使此操作變得容易一些。 這是一個ES5解決方案。

 var array = [["key1", "value1"], ["key2", "value2"]] function nestedArrToObj(array){ return array.reduce(function(previous, current) { let obj = {}; obj[current[0]] = current[1]; previous.push(obj); return previous; }, []); } console.log(nestedArrToObj(array)) 

暫無
暫無

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

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