我有一个带有嵌套对象的对象。如何定位对象的特定索引并循环遍历image
的所有嵌套值。正如您将注意到嵌套对象的长度不同。
目标示例:productArray[0].image
= test1.png,test2.png,test3.png
var products = [
//item1
{
identifier: "item-0",
image: {
"img1": "test1.png",
"img2": "test2.png",
"img3": "test3.png"
}
},
//item2
{
identifier: "item-1",
image: {
"img1": "test1.png",
"img2": "test2.png"
}
},
//item3
{
identifier: "item-2",
image: {
"img1": "test1.png",
"img2": "test2.png",
"img3": "test3.png",
"img4": "test4.png",
"img5": "test5.png",
"img6": "test6.png",
"img7": "test7.png"
}
}
];
答案 0 :(得分:1)
我们可以做到这一点。您需要做的是在特定索引处通过对象的简单循环,或者您可以将它们全部定位。请注意,image
对象不是数组,因此它没有准确的length
属性。
定位所有索引:
for(var i = 0; i < products.length; i++) {
console.log("Item: " + i);
var images = products[i].image;
for(var a in images)
console.log(images[a]);
}
具体目标:
for(var i in products[0].image)
console.log(products[0].image[i]);
我在这里使用了for循环,但如果你愿意,可以使用while循环。
答案 1 :(得分:0)
var strs = (function( obj ) {
var ret = [];
for( im in obj ) {
ret.push( obj[im] );
//You could access each image URL here
//ad strs in the end will have all of them
//comma-separated after this code completes
// im is the key, obj[ im ] the value
}
return ret.join(',');
})( products[0].image );
console.log( strs );
答案 2 :(得分:0)
<强>步骤:强>
<强>代码:强>
for(var i = 0; i < products.length; i++)
{
for(var j in products[i].image)
{
// Here you have all the images for the current product.
// You can print them, group them or whatever you want to do with them
console.log(products[i].image[j]);
}
}
此外,您可以更改代码(引入变量)以使其更具可读性。
答案 3 :(得分:0)
这是另一种方法,使用ECMAScript 5中的新功能
var images = Object.keys(products[2].image).map(function(key){
return products[2].image[key]
})
console.log(images) // Returns: ["test1.png", "test2.png", "test3.png", "test4.png", "test5.png", "test6.png", "test7.png"]
Object#keys
返回一组键名。 Array#map
使用Object#keys
中的键创建一个新数组。通过从对象中查找键,您将获得值,即图像名称。
<强> JS FIDDLE 强>