我正在寻找可以解决此问题的功能或方法 这是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");
}
}
使用此代码,网站控制台上的结果既是“相等”又是“无结果”,而我只想打印“相等”。我理解此代码中的逻辑错误,但我无法弄清楚找出正确的解决方法。
答案 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
来返回true
或false
,如果其中一个数组元素与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是处理发现数组中元素存在的更好方法