我有一个对象数组,我无法将其转换为对象。我拥有的对象数组如下:
var x = [{
name: "a",
items: [{
name: "b",
items: [{
name: "c"
}]
}]
},
{
name: "d",
items: [{
name: "e",
items: [{
name: "f"
}]
}]
}];
我想把它转换成这样的对象:
{
name: "a",
items: [{
name: "b",
items: [{
name: "c"
}]
}]
},{
name: "d",
items: [{
name: "e",
items: [{
name: "f"
}]
}]
}
我使用了stackoverflow解决方案之一
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[i] = arr[i];
return rv;
}
但它转换如下:
{
"0":{
"name":"a",
"items":[{"name":"b","items":[{"name":"c"}]}]},
"1":{
"name":"d",
"items":[{"name":"e","items":[{"name":"f"}]}]}
}
那么,如何以我给出的格式获取对象?
答案 0 :(得分:0)
以下不是一个对象
{
name: "a",
items: [{
name: "b",
items: [{
name: "c"
}]
}]
}, // this comma shows you that it's can't be one object.
{
name: "d",
items: [{
name: "e",
items: [{
name: "f"
}]
}]
}
您不能拥有具有相同名称的两个不同属性的对象。
答案 1 :(得分:0)
您希望将数组缩减为单个对象:
var output = x.reduce(function(output, arrayItem) {
var key = arrayItem.name;
output[key] = arrayItem;
return output;
}, { });
答案 2 :(得分:0)
也许你想要这样的东西
var x = [{
name: "a",
items: [{
name: "b",
items: [{
name: "c"
}]
}]
},
{
name: "d",
items: [{
name: "e",
items: [{
name: "f"
}]
}]
}];
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[arr[i].name] = { items: arr[i].items} ;
return rv;
}
console.log(toObject(x));
答案 3 :(得分:0)
您遇到的一个问题是,当从该阵列创建一个对象时,您将拥有多个具有相同名称的键,因此每个name:
将被您尝试的下一个键覆盖并添加到该对象。在您的函数中,因为您正在执行rv[i]
,并且我是一个数字,这就是您在新创建的对象中获取数字的原因。
可能的解决方案是
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[arr[i].name] = arr[i].items;
return rv;
}
但是这会使对象外部的键等于原始对象数组的name: