循环遍历对象并返回所有属性数组的值

时间:2015-01-14 02:11:25

标签: javascript

我有一个带有一堆属性的javascript对象。在此示例中,每个属性表示一件衣服,带有一个键,然后是一个数组值。

var clothes = {
  CLO1: ["shirt", "cotton", "white"],
  CLO2: ["tie", "silk", "red"],
  CLO3: ["shoes", "leather", "black"]
};

我想遍历每一件衣服并打印出每件衣服的颜色。我试图找出最简洁的方法来做到这一点。像这样的东西 -

for (property in object) {
if (property[key]){
    return (property[2])
  } else { return "none";
}

任何想法都会非常感激。我希望这是有道理的。谢谢!

4 个答案:

答案 0 :(得分:7)

对我来说很好看。数组有时是空的还是空的?删除额外退货声明的意见中的建议是一个很好的建议。

我注意到每个数组都有类似的结构。第一个元素是服装类型,第二个元素是材料,第三个元素是颜色。您可以使用对象而不是数组。使用对象的优点是它可以告诉您(和其他程序员)更多关于数据结构的信息。使用数组存储这些对象的集合:

var clothes = [
  { type: "shirt",
    material: "cotton",
    color: "white"
  },
  { type: "belt",
    material: "leather",
    color: "none"
];

此外,而不是检查属性"颜色"存在,总是包括"颜色"。设置"颜色"到"无"如果它不相关。

打印颜色如下:

clothes.forEach(function(each) {
    console.log(each.color);
});

<强>更新 我选择总是包括&#34; color&#34;因为它简化了程序代码。如果没有数据冗余,我必须检查在迭代属性时是否存在特定键。我通常选择简化代码,而不是数据。从哲学上讲,它类似于密集和稀疏数据表示之间的权衡。

还有一个语义原因总是包括颜色。如果有些衣服有尺寸&#34;尺寸&#34;但其他人不会。如果我看到的所有例子都没有&#34;尺寸&#34 ;?我不知道要包括&#34; size&#34;在我的程序代码中。

答案 1 :(得分:1)

var clothes = {
  CLO1: ["shirt", "cotton", "white"],
  CLO2: ["tie", "silk", "red"],
  CLO3: ["shoes", "leather", "black"]
};

var print = function(obj) {
    for (var property in obj) {
        if (obj.hasOwnProperty(property)) {
            console.log(obj[property][2]);
        }
    }
}   

print(clothes);

在for循环的每次迭代中,属性变量保存属性的名称,然后必须索引到obj以检索属性的值,然后再次索引数组的第二个元素以获取你要的颜色。

虽然我建议创建一个结构(由@ahoffer建议)来保存这些项目,但这样做有效。

答案 2 :(得分:1)

// - Object.keys takes an object and returns an array of keys
// - forEach iterates that array
// - console.log prints it to the console

Object.keys(clothes).forEach(function (type) {
    console.log(clothes[type][2]);
});

答案 3 :(得分:0)

也许是这样的?

Object.keys(clothes).forEach(function(type) {
   console.log(type + ": " + clothes[type].join(', '));
});

上面的代码将为您提供:

CLO1: shirt, cotton, white
CLO2: tie, silk, red
CLO3: shoes, leather, black