我正在努力比较两个对象数组并从第一个数组中删除不匹配的对象。
我需要比较两个对象的数组(array1和array2)和 从数组1中删除NOT MATCHED对象。
这是我到目前为止所做的事情,但它删除了所有项目。
@Override
public void onPolylineClick(Polyline polyline) {
....
}
答案 0 :(得分:1)
如果您使用array1
循环i = 0, len = array1.length; i < len; i++
,但循环中的,则会从array1
中删除一个条目您认为发生了什么下一个循环?
您似乎也删除了 找到的内容,但您的问题是说您要删除那些不的内容。在下面,根据您的评论,我删除了未找到的内容。
在这种情况下,请使用while
循环。我还使用Array#some
(ES5 +)或Array#find
(ES2015 +),而不是使用内循环:
var i = 0;
var entry1;
while (i < array1.length) {
entry1 = array1[i];
if (array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; })) {
// Found, progress to next
++i;
} else {
// Not found, remove
array1.splice(i, 1);
}
}
或者如果可以创建新阵列,请使用filter
:
array1 = array1.filter(function(entry1) {
return array2.some(function(entry2) { return entry1.Id === entry2.Student.Id; }));
});
答案 1 :(得分:0)
var array1 = [1,2,3,4,5];
var array2 = [3,4];
var array3 = array1.filter(i => array2.indexOf(i) !== -1);
答案 2 :(得分:0)
您可以这样做:
var array1 = [1,2,3,4];
var array2 = [2,4,6,8];
var array3 = [];
for (var i = 0; i < array1.length; i++) {
for (var j = 0; j < array2.length; j++) {
if (array1[i] === array2[j]) {
array3.push(array1[i]);
}
}
}
console.log(array3);
> [ 2, 4 ]
答案 3 :(得分:0)
var Employees= [{name:"Ram",htno:1245},{name:"mohan",htno:1246},
{name:"madhu",htno:1247},{name:"ranga",htno:1248}]
var seletedEmployees= [{name:"mohan"},{name:"ranga"}];
var nonmatched = Employees.filter(function(val,index) {
return seletedEmployees.map(function(e) { return e.name; }).indexOf(val.name) == -1;
});
console.log(nonmatched);
答案 4 :(得分:0)
2021
const a1 = {a:1,b:2,c:3}
const a2 = {a:1,b:2,c:4,d:6}
const r = {}
for(const k2 in a2){
for(const k1 in a1){
if(k1 === k2){
r[k1] = a2[k1]
}
}
}
console.log(r) // {a: 1, b: 2, c: 4}
在我看来,这些 for 循环运行得又快又干净。 似乎是处理对象数组的最简洁的方式。