我在这里找到了一些类似的主题,但不是一个真正适合我的问题的答案。使用Javascript我想将数组转换为对象。给出以下数组:
[{id:1,name:"aa"},{id:2,name:"bb"},{id:3,name:"cc"}]
我想达到这样的目的:
{1:{name:"aa"},2:{name:"bb"},3:{name:"cc"}}
最快/最短的方式是什么?考虑到我的数组中可能有1000个项目,如何以有效的方式实现此结果?
答案 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;
答案 1 :(得分:0)
[{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);