为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用嵌套数组在javascript中形成对象,使用第一个数组作为对象,数组的其余部分作为值

如何使用嵌套数组在javascript中形成对象,使用第一个数组作为对象,数组的其余部分作为值

桃花长相依 2022-01-20 20:43:10
我得到了一个这样的数组:data = [  ['first_name', 'second_name', 'sex'],  ['Jacob', 'David', 'M'],  ['Kathryn', 'Gardener', 'F'],  ['Jamaal', 'Dave', 'Unknown']].解决方案是将数组作为看起来像这样的对象返回:[  { first_name: "Jacob", second_name: "David", sex: "M" },  { first_name: "Kathryn", second_name: "Gardener", sex: "F" }  {....}];我写了以下代码:var object = {};var arrays = [];for (i = 0; i < data.length; i++){   for (var j = i; j < data.length; j++){       var keys = data[0][i];       var values = data [j][i];       object[keys] = values;   }   arrays.push(object);};但我的输出是:[   {       first_name :'Jamaal',      second_name : 'Dave',      sex : 'unknown'   },   {       first_name :'Jamaal',      second_name : 'Dave',      sex : 'unknown'   },   {      first_name :'Jamaal',      second_name : 'Dave',       sex : 'unknown'   },   {      first_name :'Jamaal',      second_name : 'Dave',      sex : 'unknown'    }];我也尝试了几种方法,要么我最终只能创建一个对象......
查看完整描述

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; }


查看完整回答
反对 回复 2022-01-20
?
慕斯709654

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);


查看完整回答
反对 回复 2022-01-20
?
陪伴而非守候

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;

}


查看完整回答
反对 回复 2022-01-20
  • 3 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信