【问题标题】:Array of an array to object list (without extra array) in output输出中的数组到对象列表(没有额外的数组)的数组
【发布时间】:2017-02-20 06:11:13
【问题描述】:

使用Array of array to object - javascriptConvert an array to an array of objects 作为指导,我尝试编写一个函数,结果是 取这个数组列表:

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]];

并将其转换为:

{
  name : 'Sparky'
  breed : 'lab',
  age : 4
}

但是,当我运行下面的代码时:

var list = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

function toObjects(data) {
  var keys = data.shift(),
    i = 0,
    k = 0,
    obj = null,
    output = [];

  for (i = 0; i < data.length; i++) {
    obj = {};

    for (k = 0; k < keys.length; k++) {
      obj[keys[k]] = data[i][k];
    }

    output.push(obj);
  }

  return output;
}
var data = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

console.log(toObjects(data))

我明白了:

console.log(toObjects(data)); //=> 

[ { name: 'breed', Sparky: 'lab' },{ name: 'age', Sparky: 4 } ]

但我需要输出没有额外的数组 [],并且还需要像这样列出单个文件:

       {
          name : 'Sparky'
          breed : 'lab',
          age : 4
        }

有什么建议吗?谢谢,麻烦您了!

【问题讨论】:

  • 然后将output定义为{}而不是obj[..][..]output[..][..]
  • 你不能list.reduce((accu, curVal) =&gt; { accu[curVal[0]] = curVal[1]; return accu; }, {})吗?

标签: javascript arrays javascript-objects


【解决方案1】:

我会使用Array.prototype.reduce 来执行你的转换以及参数destructing。看一下,代码很简单:)

let list = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

function toObjects(data) {
  // reduce iterates through every element in the `data` array
  // and accumulates it into the object

  let initialValue = {};
  return data.reduce((obj, [key, value]) => {
    obj[key] = value;
    return obj;
  }, initialValue); // this could be in-lined with `{}`
}

var data = [
  ['name', 'Sparky'],
  ['breed', 'lab'],
  ['age', 4]
];

console.log(toObjects(list))

【讨论】:

  • @Rajesh 我只是想给它命名以显示发生了什么。我再改名
  • 谢谢@Rico,这就是我要找的!!
  • 感谢大家的帮助!!欣赏!
【解决方案2】:

您可以使用地图功能来实现这一点

var list = [['name', 'Sparky'], ['breed', 'lab'], ['age', 4]];
var newObj = new Object();
list.forEach(function (arr) {
   newObj[arr[0]] = arr[1];
});

console.log(newObj)

【讨论】:

  • 我不认为 OP 正在寻找替代方案。这个问题的目的是将输出作为对象而不是数组。
  • 投反对票,因为您正在使用 Array.map 而不返回任何内容并分配。这只是浪费Array.map。如果您只想处理数组,请使用Array.forEach
  • newObj[arr[0]] = arr[1];map 中使用。
  • Array.map 用于根据当前值映射值。您没有返回 .map 内的任何内容,因此它将返回 undefined。您也没有在任何地方保存输出。这是.forEach 的经典案例。您的代表的用户应该知道这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-23
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多