var arr1 = [
{a: "111", b:"222"},
{c:"333", d:"444"},
{e:"555", f: "666"},
{g: "777", h:"888"},
{i:"999", j:"000"},
{k:"111", l: "222"}
]
var arr2 = [
{a: "111", b:"222"},
{i:"999", j:"000"}
]
现在有两个数组,arr1和arr2,arr1是初始数组,arr2是arr1中选中的数组,需要将选中的数组的内容在arr1中删除,我采用的是如下方法
function removeList(originList, delList) {
var newArr = originList
delList.forEach((Element1, index1) => {
originList.forEach((Element2, index2) => {
if (isObjectValueEqual(Element1, Element2)) {
newArr.splice(index2, 1)
}
})
})
originList = newArr
return originList
}
// 只要两个对象的名和键值都相同。那么两个对象的内容就相同了
// 1.用Object.getOwnPropertyNames拿到对象的所有键名数组
// 2.比对键名数组的长度是否相等。否=>false。真=>3
// 3.比对键名对应的键值是否相等
// 通过判断对象中键名组成的数组长度和名称是否相等来判断两个对象是否相等
function isObjectValueEqual(a, b) {
var aProps = Object.getOwnPropertyNames(a);
var bProps = Object.getOwnPropertyNames(b);
if (aProps.length != bProps.length) {
return false;
}
for (var i = 0; i < aProps.length; i++) {
var propName = aProps[i]
var propA = a[propName]
var propB = b[propName]
if ((typeof (propA) === 'object')) {
if (this.isObjectValueEqual(propA, propB)) {
return true
} else {
return false
}
} else if (propA !== propB) {
return false
} else { }
}
return true
}
removeList()是函数主体,其中isObjectValueEqual()是单独封装的用来判断两个对象是否相同,运行removeList(arr1, arr2),
注意:
1、因为splice()函数是直接操作原数组,因此直接运行即可改变原来的数组,得到相应结果,如果不想改变初始数组,请用备份数组进行操作
2、因为是直接比较的数组中某项的内容,因此出现重复的项也会删除,所以需要注意初始数组的唯一性
var arr1 = [
{a: "111", b:"222"},
{c:"333", d:"444"},
{e:"555", f: "666"},
{g: "777", h:"888"},
{i:"999", j:"000"},
{k:"111", l: "222"}
]
var arr2 = [
{a: "111", b:"222"},
{i:"999", j:"000"}
]
removeList(arr1, arr2)
console.log(arr1);
结果: