2015-10-06 99 views
-2

在對它做任何事情之前,是否可以查詢某個特定值的對象範圍?例如,我會得到一個類似於JSON結構,下面一組屬性:Javascript - 查詢對象屬性值

"Properties": [ 
    { 
    "Name": "product", 
    "Values": [ "Jacket", "Shirt", "Trousers" ] 
    }, 
    { 
    "Name": "color", 
    "Values": [ "Red", "Blue", "Green" ] 
    } 
] 

一旦我在我的JS加載的JSON,我希望能夠問類似「經歷數組中的每個對象 - 如果Name等於'product',則執行一些操作,如果Name等於'color',則執行其他操作「等等。

我在想這會是類似於下面的東西,但到目前爲止沒有運氣。我猜這是因爲我試圖查詢屬性的子元素中的值。

if (Properties.hasOwnProperty('Name') === "product") { 
    alert('Yes'); 
} else { 
    alert('No'); 
} 

可以預見的是,上面的代碼將返回「不」,即使名稱屬性的值爲「產品」。

+1

提示:'Properties'是對象的數組其中有'Name'屬性。只需循環播放它們 –

+1

'Properties.hasOwnProperty('Name')===「product」將始終爲false,因爲'hasOwnProperty'返回一個布爾值。 –

回答

1

我想問一些像「通過數組中的每個對象 - 如果名稱等於'產品',做些什麼,如果名稱等於'顏色',做別的事情」等等。

您正在描述一個循環,然後在循環內進行分支。有十幾種方法可以在JavaScript中循環訪問數組(如果不是全部,大多數情況下都可以使用this answer)。其中之一是forEach

對於分支,您通常使用ifswitch,但也有很多選項。

因此,舉例來說,一種可能方法是使用forEachswitch和:

Properties.forEach(function(property) { 
    switch (property.Name) { 
     case "product": 
      // ... 
      break; 
     case "color": 
      // ... 
      break; 
    } 
}); 
+0

@Seabizkit:添加'hasOwnProperty'調用的開銷沒有特別的原因。所有OP的對象都擁有它,並且* not *的作用就是它不匹配'switch'中的任何內容(例如,錯誤)。 –

1

嘗試此(純JS):

Properties = [ 
    { 
     "Name": "product", 
     "Values": [ "Jacket", "Shirt", "Trousers" ] 
    }, 
    { 
     "Name": "color", 
     "Values": [ "Red", "Blue", "Green" ] 
    } 
]; 
for (i = 0; i < Properties.length; i++) { 
    var p = Properties[i]; 
    if (p.hasOwnProperty('Name') && p.Name == "product") { 
     console.log('Yes'); 
    } else { 
     console.log('No'); 
    } 
}