js匹配数组中对象是不是存在一个值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js匹配数组中对象是不是存在一个值相关的知识,希望对你有一定的参考价值。
for(var i =0;i<6;i++)
allarr.push(
materialId:i,
price:i+'10',
num:i
)
selearr.push(
materialId:1,
price:100,
num:100
)
$(selearr).each(function(i, el)
console.log("allarr"+allarr[index].materialId);
console.log("selearr"+selearr[i].materialId);
if(selearr[i].materialId == allarr[0].materialId)//判断是否存在重复的商品ID
selearr[i].num = num;//如果有就覆盖件数
console.log("存在覆盖"+selearr);
else
selearr.push(
materialId:allarr[index].materialId,
price:100,
num:num
)//如果没有就新增一个
console.log("不存在"+selearr);
);
如题这个匹配数组的过程按我的想法是应该覆盖的 但是它第一次匹配没有匹配到两个相等的materialId 就新增了一下 第一次匹配才匹配到 才去覆盖 怎么样 让它匹配完了再去执行我的判断
allarr也需要循环,不然无法找到重复的内容追问
可是我的这个是allarr是固定的 固定的也要循环么 而且我刚刚试了 一起循环的话 那他在前面几个不相等的话也还是会新增 直到匹配到相等的才会覆盖
追答if(selearr[i].materialId == allarr[0].materialId)//判断是否存在重复的商品IDselearr[i].num = num;//如果有就覆盖件数
console.log("存在覆盖"+selearr);
else
selearr.push(
materialId:allarr[index].materialId,
price:100,
num:num
)//如果没有就新增一个
console.log("不存在"+selearr);
改成
var flag = 0;
for(var k=0;i<allarr.length;k++)
if(selearr[i].materialId == allarr[k].materialId)
flag = 1;
break;
if(flag==1)
selearr[i].num = allarr[k].num;//如果有就覆盖件数
console.log("存在覆盖"+selearr);
else
selearr.push(
materialId:allarr[index].materialId,
price:100,
num:num
)//如果没有就新增一个
console.log("不存在"+selearr);
追问
还是不行 我试了 不存在的它也判定存在
本回答被提问者采纳js 怎么判断一个值是不是是数组
可以使用数组的indexOf()方法,如果返回值为-1则说明不存在,如果返回值为大于-1的整数,则说明存在。例如:var arr = [1,2,3];
arr.indexOf(1); // 返回0
arr.indexOf(5); // 返回-1
附:返回值为数组中的最靠前元素在数组的位置 参考技术A 本来判断一个对象类型用typeof是最好的,不过对于Array类型是不适用的
可以使用 instanceof操作符
var arrayStr=new Array("1","2","3","4","5");
alert(arrayStr instanceof Array);
当然以上在一个简单的页面布局里面是没有问题的,如果是复杂页面情况,入获取的是frame内部的Array对象,可以用这个函数判断:
function isArray(obj)
return Object.prototype.toString.call(obj) === '[object Array]';
本回答被提问者采纳
以上是关于js匹配数组中对象是不是存在一个值的主要内容,如果未能解决你的问题,请参考以下文章