从2D数组创建对象数组

时间:2017-11-24 21:36:33

标签: javascript arrays json object

我有一个服务器URL的二维列表,其格式为

[["John",5,7,"something1"],
["David",4,2,"something2"],etc]

有没有一种快速的方法可以将此列表解析为具有指定密钥对的正确JSON格式,如下所示?

[{name:"John", 
numbercolumn1:5,
numbercolumn2:7,
description:"something1"},
{},{}]

4 个答案:

答案 0 :(得分:4)

如果这些都属于您的属性,则可以使用Array#map(),如下所示:

var data = arr.map(function(a) {
  return {
    name: a[0],
    columnNumber1: a[1],
    columnNumber2: a[2],
    description: a[3]
  };
});

<强>演示:

var arr = [
  ["John", 5, 7, "something1"],
  ["David", 4, 2, "something2"]
];

var data = arr.map(function(a) {
  return {
    name: a[0],
    columnNumber1: a[1],
    columnNumber2: a[2],
    description: a[3]
  };
});

console.log(data);

答案 1 :(得分:1)

  • 您可以先创建一个包含对象属性名称的数组。
  • 之后,您可以使用Array.prototype.map迭代列表,生成新的对象列表。
  • 迭代属性名称列表以生成动态对象。

&#13;
&#13;
const bigList = [
  ['John', 1, 2],
  ['Doe', 5, 6]
];

const propertyNames = ['name', 'col1', 'col2'];

const newList = bigList.map( item => {
  const newItem = {};
  propertyNames.forEach( (propertyName, index) => {
    newItem[propertyName] = item[index];
  });
  
  return newItem;
});

console.log(newList)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

&#13;
&#13;
let data = [["John",5,7,"something1"],
            ["David",4,2,"something2"]];
            
let newData = data.map(d => (
    {name: d[0], numbercolumn1: d[1], numbercolumn2: d[2], description: d[3]}
)) 

console.log(newData)
&#13;
&#13;
&#13;

或没有es6箭头功能:

&#13;
&#13;
var data = [["John",5,7,"something1"],
            ["David",4,2,"something2"]];

var newData = data.map(function(d) {
  return {
    name: d[0], numbercolumn1: d[1], numbercolumn2: d[2], description: d[3]
  }
})

console.log(newData)
&#13;
&#13;
&#13;

希望这有帮助

答案 3 :(得分:1)

使用ES6,您可以使用destructuring assignmentshort hand properties作为对象。

&#13;
&#13;
.git
&#13;
var data = [["John", 5, 7, "something1"], ["David", 4, 2, "something2"]],
    result = data.map(([name, numbercolumn1, numbercolumn2, description]) => ({ name, numbercolumn1, numbercolumn2, description }));

console.log(result);
&#13;
&#13;
&#13;