3 回答
TA贡献1864条经验 获得超6个赞
您需要在第一个循环中使用新对象(引用),否则您会为每一行获得相同的对象。
var data = [ ['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
result = [],
i, j,
object;
for (i = 0; i < data.length; i++) {
object = {}; // take a new object
for (j = 0; j < data[i].length; j++) { // start from zero
object[data[0][j]] = data[i][j]; // use j as last key
}
result.push(object);
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
一个更短的方法Object.fromEntries。
const
getObjects = ([header, ...data]) => data.map(values =>
Object.fromEntries(values.map((value, index) => [header[index], value])));
var data = [['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
result = getObjects(data);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
TA贡献1840条经验 获得超5个赞
var data = [
['first_name', 'second_name', 'sex'],
['Jacob', 'David', 'M'],
['Kathryn', 'Gardener', 'F'],
['Jamaal', 'Dave', 'Unknown']
]
function createObject(arr){
var arr2 = [];
keysArr = arr[0];
arr.splice(0,1);
arr.forEach(function(x,i){
arr2[i] = {};
arr[i].forEach(function(y,j){
arr2[i][keysArr[j]] = arr[i][j];
});
});
return arr2;
}
createObject(data);
TA贡献1757条经验 获得超8个赞
你可以做这样的事情
dataToObj=(data)=>{
let head=data[0];
let result=[];
for(let i=1;i<data.length;i++){
let obj={};
for(let j=0;j<head.length;j++){
obj[head[j]]=data[i][j]
}
result.push(obj);
}
return result;
}
添加回答
举报