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

spr*_*ose 1 javascript

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

var clothes = {
  CLO1: ["shirt", "cotton", "white"],
  CLO2: ["tie", "silk", "red"],
  CLO3: ["shoes", "leather", "black"]
};
Run Code Online (Sandbox Code Playgroud)

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

for (property in object) {
if (property[key]){
    return (property[2])
  } else { return "none";
}
Run Code Online (Sandbox Code Playgroud)

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

aho*_*fer 7

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

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

var clothes = [
  { type: "shirt",
    material: "cotton",
    color: "white"
  },
  { type: "belt",
    material: "leather",
    color: "none"
];
Run Code Online (Sandbox Code Playgroud)

此外,不是检查属性"颜色"是否存在,而是始终包含"颜色".如果不相关,请将"颜色"设置为"无".

打印颜色看起来像:

clothes.forEach(function(each) {
    console.log(each.color);
});
Run Code Online (Sandbox Code Playgroud)

更新 我选择始终包含"颜色",因为它简化了程序代码.如果没有数据冗余,我必须检查在迭代属性时是否存在特定键.我通常选择简化代码,而不是数据.从哲学上讲,它类似于密集和稀疏数据表示之间的权衡.

还有一个语义原因总是包括颜色.如果一些衣服具有"大小"的属性,但其他人没有.如果我看的所有例子都没有"大小"怎么办?我不知道在我的程序代码中包含"大小".