我尝试检查对象数组是否具有带有键service_tags
的键值对和包含字符串array
的{{1}}值。如果这个数组有它,我也想返回对象的位置。
我的尝试返回"trace"
。
undefined
感谢您的帮助!
答案 0 :(得分:0)
我尝试检查对象数组是否具有带有键service_tags的键值对和包含字符串“ trace”的数组值
forEach
不会这样做。它始终返回undefined
。如果您只想是否存在这样的条目,请使用some
。如果要检索第一个匹配的条目,请使用find
。如果要第一个匹配条目的 index ,请使用findIndex
。
您的编辑在标题上添加了“在哪个位置”,这让我觉得您想要findIndex
:
let traceFieldIndex = gg.fields.findIndex(field => {
return field.servicio_tags && field.servicio_tags[0] === 'trace';
});
traceFieldIndex
将包含该数组中回调为其返回真值的第一个条目的索引;如果已处理了完整数组并且该回调从未返回真值,则为-1
。 / p>
如果field.servicio_tags
可能有'trace'
而不是索引0,那么您可能想要includes
在这里:
let traceFieldIndex = gg.fields.findIndex(field => {
return field.servicio_tags && field.servicio_tags.includes('trace');
});
这将搜索field.servicio_tags
中的所有条目,而不仅仅是查看第一个条目。
答案 1 :(得分:0)
根据mdn forEach
返回未定义。这样可以得到条件匹配的索引,可以使用reduce函数
let ggFields = [{
'value': "D",
'display_name': "Nat."
},
{
"value": "Likes redwine",
"display_name": "Trace 2",
"servicio_tags": [
"trace"
]
}
]
let k = ggFields.reduce(function(acc, curr, index) {
if (curr.hasOwnProperty('servicio_tags') && curr.servicio_tags.includes('trace')) {
acc.push(index)
}
return acc;
}, [])
console.log(k)
答案 2 :(得分:0)
其他解决方案也很不错,但这是一个使用.map的解决方案,它将为数组中的每个值返回一些内容,该条件首先通过if条件运行:
const gg = {};
gg.fields =
[
{value: "D", display_name: "Nat."},
{
"value":"Likes redwine",
"display_name":"Trace 2",
"servicio_tags":[
"trace"
]
}
]
const traceFieldExists = gg.fields.map((field, inx) => {
if (field.servicio_tags && field.servicio_tags[0] === 'trace'){
return {
positionOfTraceField : inx,
exists : true
};
} else {
return {
exists: false
}
}
});
console.log(traceFieldExists)
干杯!