我有一个对象数组,其中最多可以包含 6 个产品,例如
var products = [{name:'Trampoline'}, {name:'Net'}, {name:'Tent'}, {name:'Hoop'}];
// missing Ladder & Anchor
我需要一种方法来检查它们,并让它告诉我“Ladder”和“Anchor”不在阵列产品中。 !$.inArray
不起作用(jquery 的)。
有人可以帮忙吗?也许我的大脑今天已经死了,因为我就是想不通。
我尝试从它需要的所有项目的数组开始,但第一次循环只是将它们全部删除,因为第一个不是附件。
this.getUpsellItem = function() {
var p = this.getProduct();
var slots = ['Net','Tent','Ladder','Basketball','Anchor'];
for(var i = 0; i< p.length; i++) {
if(p[i].display_name2.indexOf('Net') === -1) slots.splice(0,1);
if(p[i].display_name2.indexOf('Tent') === -1) slots.splice(1,1);
if(p[i].display_name2.indexOf('Anchor') === -1) slots.splice(3,1);
if(p[i].display_name2.indexOf('Ladder') === -1) slots.splice(2,1);
if(p[i].display_name2.indexOf('Basketball') === -1) slots.splice(4,1);
console.log(p[i].display_name2.indexOf('Basketball'))
}
console.log('Printing slots')
print_r(slots)
};
最佳答案
由于您使用的是 jQuery,我们可以使用方便的 jQuery.grep()
函数仅返回 slots
中不存在于 products
中的元素。 $.grep
采用一个函数,用于过滤数组中应返回和应丢弃的元素。在本例中,我们只需使用 products.indexOf
测试 slots
中的每个项目。像这样的东西应该足够了:
var slots = [ 'Net', 'Tent', 'Ladder', 'Basketball', 'Anchor' ]
, products = [ { name: 'Trampoline' }, { name: 'Net' },
{ name: 'Tent' }, { name: 'Hoop' }
]
, missing = $.grep(slots, function(product) {
return products.indexOf({ name: product }) < 0 }
)
;
console.log(missing);
关于javascript - 查找不在数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421271/