2017-02-03 66 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