我有一个带有一堆属性的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";
}
任何想法都会非常感激。我希望这是有道理的。谢谢!
答案 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