如何比较两个数组并通过完整迭代删除重复对象
How to compare two arrays and remove duplicate objects by complete iteration
我有两个对象数组,
var deSelectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
var selectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
当我尝试使用以下逻辑比较和迭代两个数组时,
for (var i of selectedRows) {
for (var j of deSelectedRows) {
if ( i.id === j.id ) {
selectedRows.splice(i, 1);
}
}
}
由于选中的行正在拼接,我无法完全迭代。
请帮我解决这个问题。
您可以对给定的 id
使用 Set
并使用集合过滤 selectedRows
。
var deSelectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}],
selectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}],
ids = new Set(deSelectedRows.map(({ id }) => id));
selectedRows = selectedRows.filter(({ id }) => !ids.has(id));
console.log(selectedRows);
为了避免变异问题,你需要从最后一个元素开始循环,因为主要问题是被访问的元素。
var deSelectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}];
var selectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}];
var i = selectedRows.length;
while (i--) {
for (var j of deSelectedRows) {
if (selectedRows[i] && selectedRows[i].id === j.id) {
selectedRows.splice(i, 1);
}
}
}
console.log(selectedRows)
您可以使用filter来实现这个功能。
var deSelectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
var selectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC05"}
];
selectedRows= selectedRows.filter(function(cv){
return !deSelectedRows.find(function(e){
return e.id == cv.id;
});
});
console.log(selectedRows);
我有两个对象数组,
var deSelectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
var selectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
当我尝试使用以下逻辑比较和迭代两个数组时,
for (var i of selectedRows) {
for (var j of deSelectedRows) {
if ( i.id === j.id ) {
selectedRows.splice(i, 1);
}
}
}
由于选中的行正在拼接,我无法完全迭代。 请帮我解决这个问题。
您可以对给定的 id
使用 Set
并使用集合过滤 selectedRows
。
var deSelectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}],
selectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"}, { PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}],
ids = new Set(deSelectedRows.map(({ id }) => id));
selectedRows = selectedRows.filter(({ id }) => !ids.has(id));
console.log(selectedRows);
为了避免变异问题,你需要从最后一个元素开始循环,因为主要问题是被访问的元素。
var deSelectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}];
var selectedRows = [{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}];
var i = selectedRows.length;
while (i--) {
for (var j of deSelectedRows) {
if (selectedRows[i] && selectedRows[i].id === j.id) {
selectedRows.splice(i, 1);
}
}
}
console.log(selectedRows)
您可以使用filter来实现这个功能。
var deSelectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"}
];
var selectedRows = [
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC01"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC02"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC03"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC04"},
{ PoHeaderKey: 129, OrderNo: "WS1", LineNo: 1, id: "BRIC05"}
];
selectedRows= selectedRows.filter(function(cv){
return !deSelectedRows.find(function(e){
return e.id == cv.id;
});
});
console.log(selectedRows);