我尝试检查对象数组是否具有键值对,键service_tags
和array
的值包括字符串"trace"
。如果这个数组有它,我也想返回对象的位置。
我的尝试返回undefined
。
gg.fields =
[
{ ... },
{value: "D", display_name: "Nat."},
{
"value":"Likes redwine",
"display_name":"Trace 2",
"servicio_tags":[
"trace"
]
}
]
//function
let traceFieldExists = gg.fields.forEach((field, positionOfTraceField) => {
if (field.servicio_tags && field.servicio_tags[0] === 'trace') {
return {
positionOfTraceField : positionOfTraceField,
exists : true
};
} else {
return {exists : false};
}
});
感谢您的帮助!
我尝试检查对象数组是否具有键值对与键service_tags和包含字符串"trace"的数组值
forEach
不会那样做。它总是返回undefined
.如果您只是想知道是否存在此类条目,请使用 some
。如果要检索第一个匹配的条目,请使用 find
。如果需要第一个匹配条目的索引,请使用 findIndex
。
您的编辑在标题中添加了"在哪个位置",这让我认为您想要findIndex
:
let traceFieldIndex = gg.fields.findIndex(field => {
return field.servicio_tags && field.servicio_tags[0] === 'trace';
});
traceFieldIndex
将包含数组中回调返回真值的第一个条目的索引,或者如果处理了整个数组并且回调从未返回真值,则-1
。
如果field.servicio_tags
可能有'trace'
但不在索引 0 处,则可能需要includes
:
let traceFieldIndex = gg.fields.findIndex(field => {
return field.servicio_tags && field.servicio_tags.includes('trace');
});
这将搜索field.servicio_tags
中的所有条目,而不仅仅是查看第一个条目。
根据 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)
其他解决方案也很棒,但这里有一个使用 .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)
干杯!