对象数组检查它是否包含键值对;在哪个位置-Javascript

时间:2018-12-29 16:26:07

标签: javascript arrays object foreach

我尝试检查对象数组是否具有带有键service_tags的键值对和包含字符串array的{​​{1}}值。如果这个数组有它,我也想返回对象的位置。

我的尝试返回"trace"

undefined

感谢您的帮助!

3 个答案:

答案 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)

干杯!