Javascript检查数组json中是否存在值

时间:2018-09-03 14:08:14

标签: javascript

我要检查ID是否存在于数组列表中。 我尝试了一些,例如IndexOf或hasOwnProperty等。

希望有人可以帮助我。

那是我的尝试

if(array.hasOwnProperty('3771245')) {
    alert('is in array');
} else {
    alert('is not in array');
}

那是数组:

var array = [ 
  {
    id: 3771245,
    sku: 149
  }, 
  { 
    id: 125125125,
    sku: 149
  },
  { 
    id: 5351531,
    sku: 149
  }
];

下面是我要检查的项目是否在数组json中

var items = [ { id: '3771245' }, { id: '37712415' } ];

7 个答案:

答案 0 :(得分:1)

使用Array.prototype.filter(),然后使用Array.prototype.map()

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]

const searchIds = [3771245, 125125125];

const items = array
  .filter(i => searchIds.includes(i.id))
  .map((i) => { return { id: i.id } })

console.log(items)

答案 1 :(得分:0)

您可以分割逗号分隔的值并循环到该值,以针对数组内的对象检查id值。请注意,id是数字,因此您需要在值前加上+或使用parseInt()将其更改为数字并在find()函数中进行检查。您也可以使用ECMAScript,但在IE和旧版浏览器中将无法使用。

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]
var items = [ { id: '3771245' }, { id: '37712415' } ];
var match = true;
items.forEach(function(itemObj){
  var exist = array.find(function(obj){
    return obj.id === parseInt(itemObj.id);
  });
  if(!exist){
    match = false;
  }
});
if(match){
  alert('All matched');
} else {
  alert('Not matched');
}

答案 2 :(得分:0)

您可以将搜索字符串除以,,然后找到与搜索项匹配的元素

var array = [ { id: 3771245,
sku: 149,
 }, 
 { id: 125125125,
sku: 149,
 },
 { id: 5351531,
sku: 149,
 }];
 var items = '3771245,5351531';
items = items.split(',');
var matchedItems = [];
items.forEach(function(item){
var data = array.find( function( ele ) { 
    return ele.id == item;
} );
if(data){
matchedItems.push(data);
}

});
console.log(matchedItems);

答案 3 :(得分:0)

类似的事情应该可以解决。如果项目列表很短,则可以使用这种方法。

var array = [ { id: 3771245,
    sku: 149,
     }, 
     { id: 125125125,
    sku: 149,
     },
     { id: 5351531,
    sku: 149,
     }]
let values;
for(let i =0; i <array.length; i++){
      if(array[i].id.toString() === "125125125"){
      values=values+array[i].id.toString()+', ';
      }
}

答案 4 :(得分:0)

    var array = [ { id: 3771245,
    sku: 149,
     }, 
     { id: 125125125,
    sku: 149,
     },
     { id: 5351531,
    sku: 149,
     }]
     
// usage
let index = findById(array, 3771245);
if(index!==false) {
	console.log("found in array on: ", index);
}


function findById(arr, id) {

	let exists = false;
	arr.forEach(function(element, i) {
  console.log(i);
  if(element.id==id) {
  	exists=i;
  }
});
	return exists;
}

我相信这是您正在寻找的功能。

答案 5 :(得分:0)

您可以使用Array.some函数并检查item中是否存在array数组中的值。它将返回一个布尔值,具体取决于您可以创建一个对象

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]
var items = [{
  id: '3771245'
}, {
  id: '37712415'
}]

let ifExist = {};

items.forEach(function(item) {
  let __exist = array.some(function(elem) {
    return +item.id === elem.id

  })
  ifExist[item.id] = __exist
})

console.log(ifExist)

答案 6 :(得分:0)

如果您期望得到一个简单的true / false,则函数可能如下所示:

var array = [ 
  { id: 3771245,   sku: 149 }, 
  { id: 125125125, sku: 149 },
  { id: 5351531,   sku: 149 }
];

function checkIds(arr, ids) {
  return ids.every(id => (id = parseInt(id.id,10)) && arr.some(item => item.id === id))
}

console.log('All ids exist:', checkIds(array, [{id:'3771245'}, {id:'5351531'}]))

console.log('Not all ids exist:', checkIds(array, [{id:'3771245'}, {id:'5351532'}]))

虽然大多数已发布的解决方案在功能上都是正确的,但我还是建议:

  • 请勿在大量ID上使用map(...)来查找,因为即使第一个ID不存在,您仍将遍历所有包含ID的对象,并将它们映射到其他不会包含的值用过;
  • 出于相同原因,请勿使用forEach(...)
  • 不要使用filter(...)来避免额外的类型转换和为结果数组分配内存
  • 如果您知道所有ID都是整数,则在比较值之前将其强制转换为整数而不是字符串
  • 请勿使用Number(...)-它将创建Number类型的对象,并在每次与其他值进行比较时将其隐式转换为纯数字