将嵌套数组转换为对象

3

我很难弄清楚如何转换嵌套数组,例如:

var array = [
    [['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],
    [['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],
 ['weight', 200], ['occupation', 'enforcement']]
];

将其转换为对象,例如
var array = [
    {firstName: 'Henry', codeName: 'Etta', email: 'henry@hardcore.net', weight: 180, occupation: 'repo'},
    {firstName: 'Bruce', codeName: 'DK', email: 'IamB@man.com', weight: 200, occupation: 'enforcement'}
];

以下是我目前想出的内容,但显然没有产生我需要的结果。
function arrIntoObject(array) {
  var obj = {};

  array.map(function(a) {
    a.map(function(e) {
      obj[e[0]] = e[1];  
    });
  });
  return obj;
}

这似乎是一个早就应该被问到的问题,但是我已经花了数小时的时间查找类似的问题,所以我会非常感激任何帮助或指导。谢谢!

6个回答

2
你可以将数组简化成一个对象。

var array = [
  [['firstName', 'Henry'],['codeName', 'Etta'],['email', 'henry@hardcore.net'],['weight', 180],['occupation', 'repo']],
  [['firstName', 'Bruce'],['codeName', 'DK'],['email', 'IamB@man.com'],['weight', 200],['occupation', 'enforcement']]
];

var obj = array.map( arr => arr.reduce( (acc, curr) => { 
    acc[ curr[0] ] = curr[1]; return acc;
}, {}));


console.log(obj)
.as-console-wrapper {top:0; max-height: 100%!important}


2
您可以结合使用.map().reduce(),如下所示:

var array = [
    [['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],
    [['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],
 ['weight', 200], ['occupation', 'enforcement']]
];

var objs = array.map(function (arr) {
  return arr.reduce(function (res, curr) {
    var [key, value] = curr;
    res[key] = value;
    return res;
  }, {});
});

console.log(objs);


1
你可以使用带有展开语法 ...Object.assign()map()

var array = [[['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],[['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],['weight', 200], ['occupation', 'enforcement']]];

var result = array.map(e => Object.assign({}, ...e.map(([k, v]) => ({[k]: v}))))
console.log(result)

您还可以使用map(),然后与Object.assign()一起使用reduce()

var array = [[['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],[['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],['weight', 200], ['occupation', 'enforcement']]];

var result = array.map(e => e.reduce((r, [k, v]) => Object.assign(r, {[k]: v}),{}))
console.log(result)


1
你可以使用reduce方法,它允许将数组减少为单个变量,本例中为对象。 要了解更多信息,请查看MDN

var initialArray = [
    [['firstName', 'Henry'], ['codeName', 'Etta'], ['email', 'henry@hardcore.net'], ['weight', 180], ['occupation', 'repo']],
    [['firstName', 'Bruce'], ['codeName', 'DK'], ['email', 'IamB@man.com'],
 ['weight', 200], ['occupation', 'enforcement']]
];

function arrayToObject(a) {
  return a.reduce(function (obj, keyValue) {
    obj[keyValue[0]] = keyValue[1];
    return obj;
  }, {});
}

var finalArray = initialArray.map(arrayToObject);

console.log(finalArray);


0
array.map(val => val.reduce(function(obj, prop) {
  obj[prop[0]] = prop[1];
  return obj;
}, {}));

0
希望这个简单的逻辑能够帮到你。

var array = [
  [
    ['firstName', 'Henry'],
    ['codeName', 'Etta'],
    ['email', 'henry@hardcore.net'],
    ['weight', 180],
    ['occupation', 'repo']
  ],
  [
    ['firstName', 'Bruce'],
    ['codeName', 'DK'],
    ['email', 'IamB@man.com'],
    ['weight', 200],
    ['occupation', 'enforcement']
  ]
];

var output = [];
array.forEach(function(arr1) {
  output.push({});
  arr1.forEach(function(arr2) {
    output[output.length - 1][arr2[0]] = arr2[1];
  })
});

console.log(output);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接