var a = [1,2,3,4,5,6];
var b = [2,3,6];
数组b 是 数组a 的一个子集,a中去掉包含b的元素,最优的方案有哪些?
function diff(a1, a2) {
return a1.concat(a2).filter(function (val, index, arr) {
return arr.indexOf(val) === arr.lastIndexOf(val);
});
}
function diff2(a1, a2) {
return a1.filter(val => {
return a2.indexOf(val) === -1;
})
}
使用Array的filter
方法就可以解决你的问题,具体实现很简单,别人也有回答。
如果你不介意引用第三方库,那么推荐你引入lodash,这个库包含了大量处理数组的方法,如果你对数组操作场景比较多,强烈推荐使用。
它有个函数专门处理这个问题,叫做difference. 当然了,前面有个同学说用without也可以,只不过用起来没有difference方便。
下面代码中的"_"是引入lodash后一个默认的对象,所有lodash定义的方法都在它下面,有点像引入jQuery后使用的"$"
var a = [1,2,3,4,5,6];
var b = [2,3,6];
var result = _.difference(a, b); // result=[1,4,5]
8 回答4.5k 阅读✓ 已解决
6 回答3k 阅读✓ 已解决
5 回答2.6k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
何必用
loadash
,直接用数组的filter
方法就行了: