推送到数组
Pushing to array
我需要遍历数组和数组中具有 额外值 的每个数组,将它们作为 单独的 项推送到它们的父数组.我希望这是有道理的..
这是我的初始数组的结构:
{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 );
}
}
}
我不明白的主要问题,这似乎也是我的示例中的问题:
如果我声明一个空数组,我该如何:
- 将一个项目推送到该数组并在该项目周围声明一个新数组?
- 将另一个项目推送到围绕第一个项目创建的数组?
您的问题在这里:
var value = items[type][i][value];
你应该把它改成
var value = items[type][i].value;
这就是我相信你想要的。以下代码可能不正确,因为我正在近似我认为您的 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 中了解数组和对象之间的区别。网上有很多资源可以做到这一点。
当 retrieving/manipulating 来自对象 obj
的 属性 prop
时(即对于 key-value 对),您将需要使用 obj.prop
或 obj['prop']
。请注意在后一个示例中使用了字符串。
对于数组 arr
,您应该使用 arr.push(value)
将新值推送到数组。
我需要遍历数组和数组中具有 额外值 的每个数组,将它们作为 单独的 项推送到它们的父数组.我希望这是有道理的..
这是我的初始数组的结构:
{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 );
}
}
}
我不明白的主要问题,这似乎也是我的示例中的问题:
如果我声明一个空数组,我该如何:
- 将一个项目推送到该数组并在该项目周围声明一个新数组?
- 将另一个项目推送到围绕第一个项目创建的数组?
您的问题在这里:
var value = items[type][i][value];
你应该把它改成
var value = items[type][i].value;
这就是我相信你想要的。以下代码可能不正确,因为我正在近似我认为您的 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 中了解数组和对象之间的区别。网上有很多资源可以做到这一点。
当 retrieving/manipulating 来自对象 obj
的 属性 prop
时(即对于 key-value 对),您将需要使用 obj.prop
或 obj['prop']
。请注意在后一个示例中使用了字符串。
对于数组 arr
,您应该使用 arr.push(value)
将新值推送到数组。