将JS数组转换为对象

时间:2016-02-11 18:45:46

标签: javascript arrays

我在这里找到了一些类似的主题,但不是一个真正适合我的问题的答案。使用Javascript我想将数组转换为对象。给出以下数组:

[{id:1,name:"aa"},{id:2,name:"bb"},{id:3,name:"cc"}]

我想达到这样的目的:

{1:{name:"aa"},2:{name:"bb"},3:{name:"cc"}}

最快/最短的方式是什么?考虑到我的数组中可能有1000个项目,如何以有效的方式实现此结果?

4 个答案:

答案 0 :(得分:0)

您可以使用Array.prototype.forEach()迭代数组,将id作为键并为此属性指定一个新对象。



var array = [{ id: 1, name: "aa" }, { id: 2, name: "bb" }, { id: 3, name: "cc" }],
    object = {};

array.forEach(function (a) {
    object[a.id] = { name: a.name };
});

document.write('<pre>' + JSON.stringify(object, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用Array.prototype.reduce

[{id:1,name:"aa"},{id:2,name:"bb"},{id:3,name:"cc"}].reduce(function(result, current) {
  result[current.id] = current;
  delete current.id;

  return result;
}, {});
  

我猜没有循环没办法?

正确。

  

循环不会“慢”处理10000个对象的数组?

定义“慢”。但是,是的,无论你对他们做了什么操作,10,000个对象都是很多。

修改

您还可以使用_.keyBy和(如果您使用的是util库和函数式编程):

_.chain([{id:1,name:"aa"},{id:2,name:"bb"},{id:3,name:"cc"}])
.keyBy(function(o) {
  return o.id;
})
.mapValues(function(o) {
  return _.omit(o, ['id']);
})
.value();

答案 2 :(得分:-2)

您可以选择将1改为其他。

var arrObject = [{id:1,name:&#34; aa&#34;},{id:2,name:&#34; bb&#34;},{id:3,name:&# 34; CC&#34;}];

var jsObjectToJSONString = JSON.stringify({1:arrObject});

答案 3 :(得分:-2)

如果阵列中的某些对象有一些不同的名称或者内部存在的键数不同(通知我添加了一个“数字”字段),那么动态执行此操作我会认为这是理想的每个数组项目。)

var objArr = [{id:1,name:"aa", number:25},{id:2,name:"bb", number:10},{id:3,name:"cc", number:8}],
    jsonObj = {};

for (var i = 0; i < objArr.length; i++) {
  jsonObj[i] = {};
  var keys = Object.keys(objArr[i]);
  //start at '1' to ignore 'id' key
  for (var j = 1; j < keys.length; j++) {
    jsonObj[i][keys[j]] = objArr[i][keys[j]];
  }
}

console.log(jsonObj);