[英]loop through object and return value of all property arrays
我有一個帶有一堆屬性的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";
}
任何想法將不勝感激。 我希望這是有道理的。 謝謝!
在我看來很好。 數組有時為空還是為空? 注釋中建議刪除多余的return語句是一個很好的建議。
我注意到每個數組都有類似的結構。 第一個元素是衣服的類型,第二個元素是材料,第三個元素是顏色。 您可以使用對象而不是數組。 使用對象的好處是它可以告訴您(和其他程序員)更多有關數據結構的信息。 使用數組存儲這些對象的集合:
var clothes = [
{ type: "shirt",
material: "cotton",
color: "white"
},
{ type: "belt",
material: "leather",
color: "none"
];
另外,不要檢查屬性“ color”是否存在,而應始終包括“ color”。 如果不相關,請將“顏色”設置為“無”。
打印出顏色看起來像:
clothes.forEach(function(each) {
console.log(each.color);
});
我選擇始終包含“顏色”的UPDATE,因為它簡化了過程代碼。 沒有數據冗余,我必須檢查迭代屬性時是否存在特定的鍵。 我通常選擇簡化代碼,而不是數據。 從哲學上講,這類似於密集和稀疏數據表示之間的權衡。
還有一個語義原因,總是包含顏色。 如果有些衣服具有“大小”屬性,而其他衣服沒有,該怎么辦。 如果我查看的所有示例都沒有“大小”怎么辦? 我不知道在程序代碼中包含“大小”。
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所建議的)來容納這些項目,但這是可行的。
// - 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]);
});
也許是這樣嗎?
Object.keys(clothes).forEach(function(type) {
console.log(type + ": " + clothes[type].join(', '));
});
上面的代碼將為您提供:
CLO1: shirt, cotton, white
CLO2: tie, silk, red
CLO3: shoes, leather, black
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.