检查哈希数组是否包含哈希值

时间:2016-12-13 17:36:04

标签: javascript arrays object ecmascript-6 lodash

假设我有一个变量:

var vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

var v1 = {
      Name: 'Magenic',
      ID: 'ABC'
     };

当我运行以下代码以使用 indexOf v1中搜索vendors时,它始终会返回-1

console.log(vendors.indexOf(v1));

即使v1数组中存在vendors,它也会返回-1。使用js在对象数组中查找对象索引的正确方法是什么?

我可以使用循环,但代价很高:(

3 个答案:

答案 0 :(得分:3)

您可以使用findIndex



var vendors = [{ Name: 'Magenic', ID: 'ABC' }, { Name: 'Microsoft', ID: 'DEF' }];

console.log(vendors.findIndex(v => v.ID === 'ABC')) // 0
console.log(vendors.findIndex(v => v.ID === 'DEF')) // 1




答案 1 :(得分:1)

要检查数组是否包含对象,您可以使用some(),然后检查key - value的某个数组对象中是否存在每个every()对,这将返回true/false结果。



var vendors = [{
  Name: 'Magenic',
  ID: 'ABC'
}, {
  Name: 'Microsoft',
  ID: 'DEF'
}];

var v1 = {
  Name: 'Magenic',
  ID: 'ABC'
};

var result = vendors.some(function(e) {
  return Object.keys(v1).every(function(k) {
    if(e.hasOwnProperty(k)) {
      return e[k] == v1[k]
    }
  })
})

console.log(result)




答案 2 :(得分:0)

通过这种方式,您可以测试对象是否包含在对象数组中



var vendors = [
    {
      Name: 'Magenic',
      ID: 'ABC'
     },
    {
      Name: 'Microsoft',
      ID: 'DEF'
    }
];

var v1 = {
      Name: 'Magenic',
      ID: 'ABC'
     };

var result = vendors.findIndex(x => x.ID === v1.ID && x.Name === v1.Name)
console.log(result);