javascript - 查找不在数组中的项目

标签 javascript jquery arrays

我有一个对象数组,其中最多可以包含 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/

相关文章:

javascript - 单击时在上下滑动 div 上添加选项卡下拉列表

c数组拼接问题

javascript - 在二维数组中动态创建索引

javascript - 仅触发嵌套元素中的单击事件

javascript - vuejs2如何在输入聚焦时阻止表单提交并在失去焦点时启用它?

javascript - 我的元素上的哪个 jQuery 附加事件首先触发?

C数组元素改变值

javascript - Function.prototype.apply 给我留下了 undefined is not a function 错误

javascript - 如何在 Bootstrap 标签输入上应用谷歌自动完成功能?

javascript - 使用 jQuery 提供阴影效果