我要检查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' } ];
答案 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'}]))
虽然大多数已发布的解决方案在功能上都是正确的,但我还是建议:
map(...)
来查找,因为即使第一个ID不存在,您仍将遍历所有包含ID的对象,并将它们映射到其他不会包含的值用过; forEach(...)
filter(...)
来避免额外的类型转换和为结果数组分配内存Number(...)
-它将创建Number类型的对象,并在每次与其他值进行比较时将其隐式转换为纯数字