我需要遍历数组和数组中具有额外值的每个数组,将它们作为单独的项目推送到其父数组。我希望这是有道理的。
这是我的初始数组的结构:
{type:
[ 0:
value: "tomato"
],
[ 1:
{value: "apple",
[ extras:
[ 0: { value: "green" } ],
[ 1: { value: "red" } ]
]
],
[ 2:
value: "pineapple"
]
}
结果如下:
[type:
[ 0:
tomato
],
[ 1:
apple,
green,
red
],
[ 2:
pineapple
]
]
我尝试过但失败了: (我也评论了我在右侧的错误)
var response = /* json of first codeblock in question is response from ajax */;
var items = JSON.parse( response );
var type = Object.keys( items )[0];
var myArray = []
var count = items[type].lenght;
//Loop through main items in "type"
for( i = 0; i < count; i++ ) {
var value = items[type][i][value];
myArray[type][i] = [value]; //Uncaught TypeError: Cannot set property '0' of undefined
if( items[type][i][extras] ) {
var extracount = items[type][i][extras].lenght;
//Loop through extras
for( k = 0; k < extracount; k++ ) {
var extra = items[type][i][extras][k][value];
myArray[type][i].push( extra );
}
}
}
我的主要问题是我不明白,这似乎也是我的例子中的问题:
如果我声明一个空数组,我该怎么做:
答案 0 :(得分:1)
这就是我相信你想要的。以下代码可能不正确,因为我接近我认为您的items
对象包含的内容。
var items = {
type: [
{
value: "tomato"
},
{
value: "apple",
extras: [
{
value: "green"
}, {
value: "red"
}
]
},
{
value: "pineapple"
}
]
};
var myArray = {
type: []
};
var count = items['type'].length;
//Loop through main items in "type"
for (i = 0; i < count; i++) {
var subarray = [];
subarray.push(items['type'][i]['value']);
if (items['type'][i]['extras']) {
var extracount = items['type'][i]['extras'].length;
//Loop through extras
for (k = 0; k < extracount; k++) {
var extra = items['type'][i]['extras'][k]['value'];
subarray.push(extra);
}
}
myArray['type'].push(subarray);
}
一些注意事项:
你肯定需要在javascript中学习数组和对象之间的区别。网上有很多资源可供选择。
从对象prop
检索/操作属性obj
时(例如,对于键值对),您需要使用obj.prop
或obj['prop']
。请注意在后一个示例中使用字符串。
对于数组arr
,您应该使用arr.push(value)
将新值推送到数组中。
答案 1 :(得分:0)
你的问题在这里:
var value = items[type][i][value];
你应该把它改成
var value = items[type][i].value;