使用带标志的javascript筛选器()
我想返回使用带标志的javascript筛选器(),javascript,Javascript,我想返回arr2,但想通过与arr进行比较来提示用户是否有更改。按照下面的方法,如果arr2有任何缺少的项,我将获得未定义的id var-arr=[{ id:1, 名字:“某物” }, { id:2, 名字:“某物2” }] var arr2=[{ id:1, 名字:“某物” }] var结果=arr.filter(功能(obj,i){ 返回obj.id==arr2[i].id; }); document.write(JSON.stringify(result))代码中的问题是arr[1]未定
arr2
,但想通过与arr进行比较来提示用户是否有更改。按照下面的方法,如果arr2
有任何缺少的项,我将获得未定义的id
var-arr=[{
id:1,
名字:“某物”
}, {
id:2,
名字:“某物2”
}]
var arr2=[{
id:1,
名字:“某物”
}]
var结果=arr.filter(功能(obj,i){
返回obj.id==arr2[i].id;
});
document.write(JSON.stringify(result))
代码中的问题是arr[1]
未定义,您试图获取未定义的id
属性。现在您可以做的是,获取数组中的id,然后获取索引,并基于过滤器中的id进行检查
var-arr=[{
id:1,
名字:“某物”
}, {
id:2,
名字:“某物2”
}]
var arr2=[{
id:1,
名字:“某物”
}];
var arrIds=arr2.map(函数(v){
返回v.id;
});
var结果=arr.filter(功能(obj){
变量i=arrIds.indexOf(对象id);
返回i>-1&&
obj.name==arr2[i].name;//检查此处的name属性
});
document.write(JSON.stringify(result))
在的回调中循环arr2
。filter
测试arr2
的每个项目
var-arr=[{
id:1,
名字:“某物”
}, {
id:2,
名字:“某物2”
}]
var arr2=[{
id:1,
名字:“某物”
}, {
id:5,
名字:“某物”
}, {
id:8,
名字:“某物”
}];
var isValInArr=函数(arr、key、val){
对于(变量i=0,len=arr.length;i document.write(JSON.stringify(result))
。您是否保证ID的顺序相同?如果arr2有相同的2个散列,但顺序不同呢?这是否应被视为一种变化?或者如果名称发生变化?@karina id将保持不变。但是顺序重要吗?等等。。。这就是我要问你的。数组中的顺序重要吗?例如,如果每个数组中的ID是[1,2]和[2,1],你会考虑一个“改变”@人造丝:如何处理数组长度?here@Rayon:arr[i]
将在达到最大索引后取消定义supposearray
的长度为3
,arr2
的长度为5
,.filter
处理程序将仅在3
时间内被调用…而不是5。。如果我读错了,请纠正我。@Rayon:这个问题对我来说有点不清楚。。。。。让我们等待他的响应……测试这个输入:vararr2=[{id:9,name:'something'},{id:5,name:'something'},{id:1,name:'something'}]
这会检查项目数组是否具有相同的属性吗?@JamieJordan,我不明白你的意思:(对于值为1的id,如何检查其名称值是否已更改,而不是某个东西,而是其他东西。