2017-02-03 95 views
2

我想解決這個問題的一個元素的對象:的JavaScript/VueJS:檢查數組包含具有特定價值

我得到了包含一個名爲specs屬性的對象。此屬性包含ObjectsArray所有的有2個屬性:

所以我的目標是這樣的:

Object 
-Title 
-Date 
-Specs [Array] 
-- [0] Name: "Power" 
-- [0] Value: 5 
-- [1] Name: "Weight" 
-- [1] Value: 100 

所以 - 我現在想來檢查,如果我的規格,數組包含的名稱爲「力量」的項目。如果是這種情況,我想使用這個元素的值。

我該如何解決這個問題?

回答

2

可以過濾基於name屬性陣列,並檢查過濾器返回的結果數組,如果是的話那麼你可以用指數用它來獲取值。

var data = {specs:[{Name:"Power",Value:"1"},{ 
 
    Name:"Weight",Value:"2"},{Name:"Height",Value:"3"}]} 
 

 

 
var valObj = data.specs.filter(function(elem){ 
 
       if(elem.Name == "Power") return elem.Value; 
 
      }); 
 

 
if(valObj.length > 0) 
 
console.log(valObj[0].Value)

如果使用「某些」,而不是
0
$.each(object.Specs,function(index,obj){ 
if(obj.Name === "Power") 
var myVar = obj.Value 
}); 
+1

「每個」時,循環一旦你找到一個有效的OBJ停止。 – Shilly

+0

謝謝,不知道到現在爲止。非常有幫助 –

+2

儘管這段代碼可能會回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的其他內容可以提高其長期價值。 –

2

考慮的主要對象名稱是objTemp

你可以做

var arrR = objTemp.Specs.filter(function(ele){ 
    return (ele.Name == "Power") 
}); 

if(arrR.length) 
    //has prop 
else 
    // no prop 
+0

好了 - 怎麼可能我訪問'ele.value'如果'arrR'是真的嗎?在這種情況下,我必須得到數組元素的索引,對吧? – SPQRInc

+0

@SPQRInc arrR是一個名稱爲「Power」的對象數組,因此您可以迭代arrR並獲得值爲arrR [0] .Value等等 –

0

您可以使用陣列some方法,這將返回true或false,根據您的病情,像以下:

var powerIndex 
var doesPowerExist = yourObj.specs.some((spec, index) => { 
    var powerIndex = index 
    return spec.name == "Power" 
}) 

您可以使用doesPowerExist VAR來decid編輯是否使用此元素的值。

+0

您好, 非常感謝您的回答。現在'doesPowerExist'是TRUE;或'FALSE',對不對?我怎麼能訪問'value'其中'spec.name =「能量」'? – SPQRInc

+0

@SPQRInc我修改了代碼,'powerIndex'將是相應對象的索引,如果'doesPowerExist'爲true,則使用它。 – Saurabh