从嵌套对象获取所有字符串值

时间:2014-06-19 15:51:38

标签: javascript arrays object

我有一个带有嵌套对象的对象。如何定位对象的特定索引并循环遍历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"
        }
    }
];

4 个答案:

答案 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循环。

example

答案 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 );

WORKING JS FIDDLE DEMO

答案 2 :(得分:0)

<强>步骤:

  1. 您需要遍历原始产品数组。的产品
  2. 每个元素(产品)的格式为{identifier:&#34;&#34;,image:{&#34; img1&#34; :&#34; img2&#34;,..}} 产品[i]
  3. 您获得当前产品的图像属性 - 这是一个对象。的产品[I]图像配
  4. 现在您需要迭代图像对象的属性。的产品[Ⅰ]图像配[j]的
  5. <强>代码:

    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