使用带标志的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;idocument.write(JSON.stringify(result))
。您是否保证ID的顺序相同?如果arr2有相同的2个散列,但顺序不同呢?这是否应被视为一种变化?或者如果名称发生变化?@karina id将保持不变。但是顺序重要吗?等等。。。这就是我要问你的。数组中的顺序重要吗?例如,如果每个数组中的ID是[1,2]和[2,1],你会考虑一个“改变”@人造丝:如何处理数组长度?here@Rayon:
arr[i]
将在达到最大索引后取消定义suppose
array
的长度为
3
arr2
的长度为
5
.filter
处理程序将仅在
3
时间内被调用…而不是5。。如果我读错了,请纠正我。@Rayon:这个问题对我来说有点不清楚。。。。。让我们等待他的响应……测试这个输入:
vararr2=[{id:9,name:'something'},{id:5,name:'something'},{id:1,name:'something'}]
这会检查项目数组是否具有相同的属性吗?@JamieJordan,我不明白你的意思:(对于值为1的id,如何检查其名称值是否已更改,而不是
某个东西
,而是其他东西。