我有一个像这样的嵌套数组
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])
}
答案 0 :(得分:10)
您可以利用ES6语法的强大功能:
var array = [
[1, 698],
[32, 798],
[69, 830],
[95, 500],
];
var res = array.map(([id, score]) => ({id, score}));
console.log(res);
&#13;
答案 1 :(得分:6)
您可以Array.prototype.map()使用destructuring assignment:
const array = [[1, 698],[32, 798],[69, 830],[95, 500]];
const result = array.map(([id, score]) => ({id, score}));
console.log(result);
&#13;
答案 2 :(得分:4)
使用array.prototype.map
,destructuring
和shorthand object litteral
:
var array = [[1, 698],[32, 798],[69, 830],[95, 500]];
var result = array.map(([id, score]) => ({id, score}));
console.log(result);
&#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}))
的答案都很棒。但是如果你经常要做这样的事情,你可能想写一个可重用的函数来使它更具说明性。为此,这样的事情可能有用:
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;
请注意,您也可以将其扩展为
zipAllObjects = names => listsOfValues => listsOfValues.map(zipObject(names))
然后致电
zipAllObjects(['id', 'score'])(array)