该工具类有两个方法:
1、isContained方法用来判断一个数组中是否包含另一个数组中所有的数据
2、arrayDiff方法用来删除一个数组中与另一个数组中值相同的元素
arrUtil.js文件
/**
*
* key存在时表示是对象数据,可以不存在时表示是普通数组
* @type {{isContained: arrUtil.isContained, arrayDiff: arrUtil.arrayDiff}}
*/
const arrUtil = {
//判断一个数组中是否包含另一个数组中所有的数据
isContained: function (a, b, key) {
if (!(a instanceof Array) || !(b instanceof Array)) return false;
if (a.length < b.length) return false;
let count = 0;
let depLng = b.length;
for (var i = 0; i < depLng; i++) {
for (var j = 0; j < a.length; j++) {
if (key) {
if (a[j][key] == b[i][key]) {
count++;
break;
}
} else {
if (a[j] == b[i]) {
count++;
break;
}
}
}
if (count === depLng) {
return true;
}
}
return false;
},
//删除一个数组中与另一个数组中的值相同的元素
arrayDiff: function (a, b, key) {
for (var i = 0; i < b.length; i++) {
for (var j = 0; j < a.length; j++) {
if (key) {
if (a[j][key] == b[i][key]) {
a.splice(j, 1);
j = j - 1;
}
} else {
if (a[j] == b[i]) {
a.splice(j, 1);
j = j - 1;
}
}
}
}
return a;
}
}
export default arrUtil;
使用方法:
普通数组时:
let a=[1,2,5,6,7,4,8];
let b=[1,3,5];
arrUtil.isContained(a,b) //true;
arrUtil.arrayDiff(a,b) //[2,6,7,4,8];
对象数组时:
let a=[{id:01,name:angle},{id:02,name:lina},{id:03,name:jam}];
let b=[{id:01,name:angle},{id:02,name:lina}];
arrUtil.isContained(a,b,"id") //true;
arrUtil.arrayDiff(a,b,"id") //[{id:03,name:jam}];