从嵌套数组到对象数组

时间:2018-03-27 14:35:22

标签: javascript html

我有一个像这样的嵌套数组

array = [[1, 698],[32, 798],[69, 830],[95, 500]]

我想要一个以这种格式返回结果的函数

[
    {
        id: 1,
        score: 698
    },
    {
        id: 32,
        score: 798
    },
    {
        id: 69,
        score:830
    },
  ..... the rest of the array
]

我确实使用了for循环,但没有成功,我不知道如何处理这种情况。

for(var i = 0; i <= array.lenght ; i++){
    var obj={}
    var res = []
    res.push(array[i])
}

6 个答案:

答案 0 :(得分:10)

您可以利用ES6语法的强大功能:

&#13;
&#13;
var array = [
          [1, 698],
          [32, 798],
          [69, 830],
          [95, 500],
        ];
var res = array.map(([id, score]) => ({id, score}));
console.log(res);
&#13;
&#13;
&#13;

答案 1 :(得分:6)

您可以Array.prototype.map()使用destructuring assignment

&#13;
&#13;
const array = [[1, 698],[32, 798],[69, 830],[95, 500]];
const result = array.map(([id, score]) => ({id, score}));

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

答案 2 :(得分:4)

使用array.prototype.mapdestructuringshorthand object litteral

&#13;
&#13;
var array = [[1, 698],[32, 798],[69, 830],[95, 500]];
var result = array.map(([id, score]) => ({id, score}));
console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:3)

var sampleArray = [[1, 698],[32, 798],[69, 830],[95, 500]];

var finalJson = sampleArray.map(([id, score]) => ({id, score}));


// Final Result
console.log(finalJson);

答案 4 :(得分:2)

首先你需要一个带2元素数组并返回一个对象的函数

const objBuilder = arr => return { id: arr[0], score: arr[1] }

你会想要添加错误处理,但这是基本的想法。

接下来,您希望迭代数组数组,将每个值(2个元素数组)转换为对象。这称为映射值,js原生支持

const arrayOfObjects =  array.map(objBuilder)

更多关于地图功能的信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

答案 5 :(得分:2)

许多人建议.map(([id, score]) => ({id, score}))的答案都很棒。但是如果你经常要做这样的事情,你可能想写一个可重用的函数来使它更具说明性。为此,这样的事情可能有用:

&#13;
&#13;
const zipObject = names => values => names.reduce(
  (obj, name, idx) => (obj[name] = values[idx], obj), {}
)

const array = [[1, 698], [32, 798], [69, 830], [95, 500]]
console.log(array.map(zipObject(['id', 'score'])))
&#13;
&#13;
&#13;

请注意,您也可以将其扩展为

zipAllObjects = names => listsOfValues => listsOfValues.map(zipObject(names))

然后致电

zipAllObjects(['id', 'score'])(array)