Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找不在数组中的项_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 查找不在数组中的项

Javascript 查找不在数组中的项,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有一个对象数组,其中最多可以包含6个产品,例如 var products = [{name:'Trampoline'}, {name:'Net'}, {name:'Tent'}, {name:'Hoop'}]; // missing Ladder & Anchor 我需要一种方法来检查它们,让它告诉我“梯形图”和“锚定”不在阵列产品中!$。inArray不起作用(jquery) 有人能帮忙吗??也许我的大脑已经死了一天,因为我就是想不出来 我试着从它需要的所有项目的数组开始,但是第

我有一个对象数组,其中最多可以包含6个产品,例如

var products = [{name:'Trampoline'}, {name:'Net'}, {name:'Tent'}, {name:'Hoop'}]; 
// missing 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)
    };
this.getUpsellItem=function(){
var p=this.getProduct();
变量槽=[“网”,“帐篷”,“梯子”,“篮球”,“锚];
对于(变量i=0;i
您的问题是您有一个对象数组:

var products = [{name:'Trampoline'}, {name:'Net'}, {name:'Tent'}, {name:'Hoop'}];
您希望根据这些对象的属性进行搜索。委员会:

使用严格相等比较[…](与===或三重相等运算符使用的方法相同)

因此,除非您手头有特定的对象,否则无法找到您要查找的对象,仅基于属性值或具有相同结构的对象进行搜索是不可行的

jQuery的实用函数(AFAIK)只是JavaScript实现的可移植性包装器,这些实现的数组中没有
indexOf
方法

您需要一个自己的搜索功能,类似于:

function indexOfByProperty(array, property, value) {
    for(var i = 0; i < array.length; ++i)
        if(array[i][property] == value)
            return i;
    return -1;
}
函数indexOfByProperty(数组、属性、值){
对于(变量i=0;i

如果您想更严格,也可以使用
==
,但这取决于您和您需要该函数做什么。

因为您使用的是jQuery,所以我们可以使用方便的函数仅返回
插槽中
产品中不存在的元素
$.grep
接受一个函数,该函数用于过滤数组中哪些元素应该返回,哪些元素应该丢弃。在本例中,我们只需使用
products.indexOf
测试
插槽中的每个项目。这样的东西应该足够了:

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);
var slots=[“网”、“帐篷”、“梯子”、“篮球”、“锚”]
,products=[{name:'Trampoline'},{name:'Net'},
{name:'Tent'},{name:'Hoop'}
]
,缺少=$.grep(插槽、函数(产品){
return products.indexOf({name:product})<0}
)
;
控制台日志(丢失);

如果数组很大,最好使用贴图而不是数组

var products = {"Trampoline": {name:'Trampoline'}, "Net": {name:'Net'}, etc..};

products["foo"] returns null
products["Trampoline"] returns {name: 'Trampoline'}
在ES5中,可以使用O(1)时间而不是O(n)时间钻取数组中的嵌套对象:

var products = [{name:'Trampoline'}, {name:'Net'}, {name:'Tent'}, {name:'Hoop'}];
var found_ladder = products.some(function(val, idx) {
    return val.name === 'Ladder';
});

数组函数中的Javascript

_数组中的函数(针、草堆、argStrict){

//检查数组中是否存在给定值

//*示例:in_数组('vlado',{0:'Kevin',vlado:'van',1:'Zonneveld'})

//*返回:假

//*示例:在数组中('van',['Kevin','van','Zonneveld')

//*返回值:真

var key='',strict=!!argStrict

如果(严格){

}否则{

  for (key in haystack) {

    if (haystack[key] == needle) { return true; }

  }
} 返回false; }


刚才注意到你说最多有6项,所以没有性能方面的考虑。上面的代码通过几十个项目得到了回报。
  for (key in haystack) {

    if (haystack[key] == needle) { return true; }

  }