如何将嵌套数组转换为对象

问题描述 投票:0回答:3

我想从嵌套数组中创建一个只有2级深度的对象。我提出的功能返回

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

而不是

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

我也尝试用obj[elem[0]] = elem[1];替换if语句但得到相同的结果。

如何为每个嵌套数组创建单独的对象?

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];
}
javascript object for-loop
3个回答
2
投票

使用函数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; }

1
投票

这是map的一个版本:

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

0
投票

该语言的一些较新功能使这更容易一些。这是一个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))
© www.soinside.com 2019 - 2024. All rights reserved.