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