我正在尝试迭代嵌套对象。
array=[
{
id: 2,
items: [
{
id: 12
},
{
id: 13
},
{
id: 14
}
]
},
{
id: 3,
items: [
{
id: 15
},
{
id: 16
},
{
id: 17
},
{
id: 18
},
{
id: 19
}
]
},
{
id: 4,
items: [
{
id: 20
},
{
id: 21
}
]
},
{
id: 5,
items: [
{
id: 22
}
]
}
];
我需要将所有ID都推送到一个数组中,以便我们可以在上面的代码中看到。像这样:
arrayOfId = [2, 12, 13, 14, 3, 15, 16, 17, 18, 19, 4, 20, 21, 5, 22];
我试图自己做,并在这里找到一些例子,但它们基于jQuery。我在我的项目中使用Angular。
也许有人知道使用普通JS或Angular来解决这个问题吗?
非常感谢。
答案 0 :(得分:0)
你可以在另一个循环中使用for循环。
for (var i = 0; i < array.length; i++) {
arrayOfId.push(array[i].id);
for (var j = 0; j < array[i].length; j++) {
arrayOfId.push(array[i][j]);
}
}
答案 1 :(得分:0)
实际上非常简单。
ids
值推送新数组(id
)。var l=array.length,i=0,ids=[];
for(;i<l;i++){
ids.push(array[i].id);
var nested=array[i].items,nl=nested.length,j=0;
for(;j<nl;ids.push(nested[j++].id));
};
console.log(ids);
alert(ids);
//ids=[2,12,13,14,3,15,16,17,18,19,4,20,21,5,22];
在这个例子中,我展示了编写for循环的各种方法。
此外,通过缓存 length
以及nested
数组等其他变量,性能提升。我还想提一下,对于像这样的简单函数,你需要通过多维数组/对象 LOOP ,
不鼓励使用forEach
,map
,filter
或其他“新”原生javascript函数,因为标准while
&amp; for
循环(1)。它们慢大约3-4倍。另一方面,如果您知道您的多维数组不是那么大而客户端使用现代浏览器,则map
解决方案是“短代码”替代方案(2)。
<强>样本强>
http://jsfiddle.net/axaog3n2/1/
1 https://jsperf.com/for-vs-foreach/2
2 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map
如果您有任何问题,请询问。
答案 2 :(得分:0)
使用Array.map
//This will give a 2d array of ids [[2,3],[2,3]];
var ids = array.map(function(item) {
return item.items.map(function(obj) {
return obj.id
})
});
//Now flatten and merge
var idList = [];
idList = idList.concat.apply(idList , ids);
//Output:
//[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
答案 3 :(得分:0)
简单的循环
var arrayOfId = [];
for (var i = 0; i < array.length; i++) {
arrayOfId.push(array[i].id);
if (array[i]['items'] != undefined && array[i].items.length > 0) {
for(var j = 0; j < array[i].items.length; j++) {
arrayOfId.push(array[i].items[j].id);
}
}
}
答案 4 :(得分:0)
var ids = [];
for (var x = 0; x < array.length; x++) {
ids.push(array[x].id);
if (array[x].items) {
var items = array[x].items;
for (var y = 0; y < items.length; y++) {
if (items[y].id) {
ids.push(items[y].id);
}
}
}
}
除此之外,您还需要使用递归函数来做到这一点。
var results = [];
function build(array, results) {
for (var x = 0; x < array.length; x++) {
results.push(results[x].id);
if (results[x].items) {
build(results[x].items, results);
}
}
}
build(thatObject, results);
答案 5 :(得分:0)
// create array for result
var b = [];
// iterate over the source array
array.forEach(function (outer) {
// get the id property and push the value to the result array
b.push(outer.id);
// iterate over the items
outer.items.forEach(function (inner) {
// get the id property of the inner array object and push the value to the result array
b.push(inner.id);
});
});