suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Filtern einer Teilmenge eines Arrays – Stapelüberlauf

var a = [1,2,3,4,5,6];
var b = [2,3,6];
Array b ist eine Teilmenge von Array a und schließlich die Elemente, die b enthalten Was sind die besten Optionen?

某草草某草草2798 Tage vor728

Antworte allen(4)Ich werde antworten

  • 某草草

    某草草2017-05-19 10:44:41

    https://lodash.com/docs/4.17....

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:44:41

    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;
      })
    }

    Antwort
    0
  • 高洛峰

    高洛峰2017-05-19 10:44:41

    使用原生方式解决

    使用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]

    Antwort
    0
  • 迷茫

    迷茫2017-05-19 10:44:41

    何必用loadash,直接用数组的filter方法就行了:

    var a = [1,2,3,4,5,6];
    var b = [2,3,6];
    
    var ans = a.filter((n) => !b.includes(n));
    console.log(ans);    //[1, 4, 5];

    Antwort
    0
  • StornierenAntwort