使用JavaScript中的match()或find()匹配JSON数组中的某些值

时间:2018-07-24 09:04:28

标签: javascript arrays json

我正在寻找可以解决此问题的功能或方法 这是JSON数组

[{
    "type": "radar",
    "detail": [{
        "subject": "sub1"
    }, {
        "subject": "sub2"
    }]
}, {
    "type": "bar",
    "detail": [{
        "subject": "sub1"
    }, {
        "subject": "sub2"
    }]
}]

我希望确定“ type”的值,在这种情况下为“ radar”和“ bar”,并与变量x匹配。 这是代码:

for(x in myarray)
{
    if(myarray[x]['type']=="bar")
    {
        console.log("equal");
    }
    else
    {
        console.log("no result");
    }
}

使用此代码,网站控制台上的结果既是“相等”又是“无结果”,而我只想打印“相等”。我理解此代码中的逻辑错误,但我无法弄清楚找出正确的解决方法。

3 个答案:

答案 0 :(得分:0)

由于for循环针对数组中的每个对象运行,因此equal的第一个控制台日志适用于匹配类型,第二个控制台日志适用于不匹配类型。因此,要仅获得一个控制台并编写更合适的代码,可以使用Array.find(),然后为此添加一个if-else块。像这样:

var myarray = [ { "type":"radar", "detail": [{ "subject":"sub1" }, { "subject":"sub2" }] }, { "type":"bar", "detail": [{ "subject":"sub1" }, { "subject":"sub2" }] } ];

var match = myarray.find(({type}) => type === "bar");
if(match) {
  console.log("equal");
} else {
   console.log("no result");
}

答案 1 :(得分:0)

您可以使用Array.some来返回truefalse,如果其中一个数组元素与type“ bar”相匹配,则它将返回{{1} }否则true

false

答案 2 :(得分:0)

let myArr = [ 
  { "type":"radar", 
   "detail": [
     { "subject":"sub1" }, 
     { "subject":"sub2" }
   ] 
  }, 
  { "type":"bar",
   "detail": [
     { "subject":"sub1" }, 
     { "subject":"sub2" }
   ] 
  } 
]

for(let x of myArr){
  if(x.type === 'bar'){ console.log('equal')}
  else { console.log('no result')}
}

为了理解代码出了什么问题,首先,当您有一个for循环时,您需要具有一个let/var关键字,如下所示:

for(let x of myArr)

第二,而不是使用for..in循环(该循环用于对象的属性),而使用for..of循环(用于循环数组)。

第三,在循环myArr时,每个元素x是一个对象,类型是属性,因此只需使用x.type进行比较。

最后,就像其他人提到的那样,Array#some / Array#find是处理发现数组中元素存在的更好方法