我将此传递给函数Data(array):
[
[
['firstName', 'Joe'], ['lastName', 'low']
],
[
['firstName', 'Steph'], ['lastName', 'Roberts']
]
]
想要输出:
[
{firstName: 'Joe', lastName: 'low'},
{firstName: 'Steph', lastName: 'Roberts'}
]
这就是我所拥有的:
function Data(array) {
var dict ={};
for(var j =0; j<=array.length-1; j++){
for(var i=0; i<=array[0].length-1; i++){
dict[array[j][i][0]] = array[j][i][1];
}
}
return dict
}
但输出不正确:
{ firstName: 'Steph',
lastName: 'Roberts',
}
答案 0 :(得分:2)
您正在每次迭代时更新相同的对象,而是应该在每次迭代时创建新对象并将其推送到数组
function Data(array) {
var dict = [];
for(var j =0; j<=array.length-1; j++) {
dict[j] = {};
for(var i=0; i<=array[0].length-1; i++) {
dict[j][array[j][i][0]] = array[j][i][1];
}
}
return dict;
}
console.log(Data([
[
['firstName', 'Joe'], ['lastName', 'low']
],
[
['firstName', 'Steph'], ['lastName', 'Roberts']
]
]));
&#13;
答案 1 :(得分:1)
在array[j]
替换array[0]
的{{1}},将数组设置为i<=array[0].length-1;
对象的属性
dict
答案 2 :(得分:1)
您可以将数组作为结果,并为每个外部项目选择一个dictinary。
function getArrayOfObjects(array) {
var result = [],
dict,
i, j;
for (j = 0; j < array.length; j++) {
dict = {};
for (i = 0; i < array[0].length; i++) {
dict[array[j][i][0]] = array[j][i][1];
}
result.push(dict);
}
return result;
}
var array = [[['firstName', 'Joe'], ['lastName', 'low']], [['firstName', 'Steph'], ['lastName', 'Roberts']]];
console.log(getArrayOfObjects(array));
ES6 with
Object.assign
用于收集对象的部分,
spread syntax ...
用于将数组作为参数
Array#map
获取新数组
destructuring assignment用于获取对象的值而不是使用数组,
computed property names将变量用作键。
function getArrayOfObjects(array) {
return array.map(a => Object.assign(...a.map(([k, v]) => ({ [k]: v }))))
}
var array = [[['firstName', 'Joe'], ['lastName', 'low']], [['firstName', 'Steph'], ['lastName', 'Roberts']]];
console.log(getArrayOfObjects(array));
答案 3 :(得分:1)
AvcS的答案包含您的代码失败的原因。 Nina的解决方案是完美的,如果您可以使用像Babel这样的转换器,因为浏览器对destructuring assignment的支持看起来非常糟糕。
作为替代方案,您还可以使用map和reduce,这可能会简化所需的代码:
let inp = [
[['firstName', 'Joe'], ['lastName', 'low']],
[['firstName', 'Steph'], ['lastName', 'Roberts']]
];
let result = inp.map(
entry => entry.reduce(
(obj, keyvalue) => {
obj[keyvalue[0]] = keyvalue[1];
return obj;
}, {})
);
console.log(result);
不要忘记为map
和replace
添加polyfill,也可以替换let
和箭头函数。
答案 4 :(得分:0)
您应该为所需的输出而不是对象声明一个数组变量。对象将创建 JSON ,但您希望结果为数组格式的 JSON 对象
function Data(array) {
var res=[];
var dict ={};
for(var j =0; j<=array.length-1; j++)
{
for(var i=0;i<=array[0].length-1; i++)
{
dict[array[j][i][0]] = array[j][i][1];
}
res.push(dict);
}
return res;
}