npm模块学习之arr-diff
1、git地址
https://github.com/jonschlinkert/arr-diff
2、作用
计算所给数组与其他数组不同的元素,并生成一个新数组
3、例子和源码解析
3.1 例子
const diff = require('arr-diff');
let arrayOne = ['a', 'b', 'c', 'd'];
let arrayTwo = ['b', 'd'];
console.log(diff(arrayOne, arrayTwo)) // 输出:['a', 'c']
let arrayThree = ['e', 'f', 'g', 'h'];
let arrayFour = ['i', 'e'];
let arrayFive = ['g', 'e'];
console.log(diff(arrayThree, arrayFour, arrayFive)) // 输出:['f', 'h']
3.2 源码及解析
function diff(arr) {
var len = arguments.length; // 充分利用了arguments,即使diff只有一个参数名,但是可以传多个参数数组, 这样可以让多个数组进行比较
var idx = 0;
while (++idx < len) {
arr = diffArray(arr, arguments[idx]); // 拿第一个数组与其他数组进行比较。比较的结果再与其他数组比较
}
return arr;
};
function diffArray(one, two) {
if (!Array.isArray(two)) { // 如何two不是数组,就浅拷贝并返回
return one.slice();
}
var tlen = two.length;
var olen = one.length;
var idx = -1;
var arr = [];
while (++idx < olen) { // 遍历第一个数组
var ele = one[idx];
var hasEle = false;
for (var i = 0; i < tlen; i++) { // 拿第一个数组的元素与第二个数组的每个元素进行比较
var val = two[i];
if (ele === val) { // 如果第二个数组存在该元素,就停止遍历
hasEle = true;
break;
}
}
if (hasEle === false) {
arr.push(ele);
}
}
return arr;
}
1 回复
顶一个