欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

JavaScript获取两个数组数组的差集 array 有大用 有大大用

JavaScript获取两个数组数组的差集

JavaScript在ES6中增加了很多Array对象的方法,这让我们在做数组元素操作的时候方便很多。
以下便是分别通过Array的some,find,findIndex和includes方法配合filter实现的两个数组的差集的方式,和测试结果:

const arra = ['a', 'b', 'c', 'd', 'e'];
const arrb = ['b', 'e'];
console.log("some: " + arra.filter(v => !arrb.some((item) => item === v)));
console.log("find: " + arra.filter(v => !arrb.find((item) => item === v)));
console.log("findIndex: " + arra.filter(v => arrb.findIndex((item) => item === v) < 0));
console.log("includes: " + arra.filter(v => !arrb.includes(v)));
console.log(arra);
       

运行结果:
       

该方法返回新数组,不改变原数组的内容。

抽象成方法(仅提供includes的方式,其他方式直接替换即可):

function arrayAminusB(arrA, arrB){
      return arrA.filter(v => !arrB.includes(v));
}
   

来自  https://www.cnblogs.com/tonly85/p/13953249.html


JS求数组差集的几种方法


第一种:如果不考虑IE8的兼容性完全可以使用Foreach ,此方法求出arr1 减去 arr2的差集,

  1. arr1 = [1,2,3,4];
  2. arr2 = [1,2,3];  
  3.   var subSet = function (arr1, arr2) {
  4.         var set2 = new Set(arr2);
  5.         var subset = [];
  6.         arr1.forEach(function(val, index) {
  7.             if (!set2.has(val)) {
  8.                 subset.push(val);
  9.             }
  10.         });
  11.         return subset;
  12.     };
  13. //结果等于4

第二种是使用JQ 的merge和grep的配合使用求差集,兼容IE8 、chrome等主流游览器

  1. var alpha = [1, 2, 3, 4],
  2. beta = [1,2,3];
  3. $.arrayIntersect = function(a, b)
  4. {
  5. return $.merge($.grep(a, function(i)
  6. {
  7. return $.inArray(i, b) == -1;
  8. }) , $.grep(b, function(i)
  9. {
  10. return $.inArray(i, a) == -1;
  11. })
  12. );
  13. };
  14. window.console && console.log( $.arrayIntersect(alpha, beta) );
  15. //结果等于4

第三种使用ES6 的set 方法类似与foreach方法

  1. var subSet = function(arr1, arr2) {
  2. var set1 = new Set(arr1);
  3. var set2 = new Set(arr2);
  4. var subset = [];
  5. for (let item of set1) {
  6. if (!set2.has(item)) {
  7. subset.push(item);
  8. }
  9. }
  10. return subset;
  11. };

 

来自  https://blog.csdn.net/qq_27551075/article/details/101512354


普通分类: