簡體   English   中英

遍歷對象並返回所有屬性數組的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM