代码之家  ›  专栏  ›  技术社区  ›  The Fool

在javascript中,从数组中删除“坏”值的最有效方法是什么?[复制]

  •  0
  • The Fool  · 技术社区  · 6 年前

    我想弄清楚哪种方式是最好的,就性能而言。

    考虑到以下问题:;

    您有一个数字数组,另一个数组包含要从第一个数组中删除的数字。

    https://codepen.io/bluebrown/pen/VRGgpm

    let dataArray = [2,4,5,8,1,9,3];
    let blackList = [3,5,8,7];
    
    function findFaulty(data, bad) {
      if (bad.length > 0) {
        let cleanData = [];
        data.forEach(item => {
          let x = 0;
          bad.forEach(b => {
            if (b === item) return;
            x++;
            if (x >= bad.length) cleanData.push(item);
          });
        });
        return cleanData;  
      }
      return data;
    };
    
    console.log(findFaulty(dataArray, blackList));
    

    然后: https://codepen.io/bluebrown/pen/GeXwBL?editors=0012

    let dataArray = [2, 4, 5, 8, 1, 9, 3];
    let blackList = [2, 3];
    
    function filterData(data, bad) {
        bad.forEach((b, i, a) => a[i] = data.indexOf(b));
        bad.filter(x => x > -1).forEach((b, i) => data.splice(b, 1, -1));
        return data.filter(d => d > -1)
    };
    
    console.log(filterData(dataArray, blackList));
    

    最后: https://codepen.io/bluebrown/pen/EMdyVg

    let data = [2, 4, 5, 8, 1, 9, 3];
    let faulty = [2, 1, 5, 6];
    
    let clean = data.filter(d => faulty.indexOf(d) < 0 );
    
    console.log(clean);
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Nina Scholz    6 年前

    可以从末尾迭代数组,然后拼接找到的项。

    function filter(items, remove) {
        var i = items.length;
        while (i--) {
            if (remove.includes(items[i])) items.splice(i, 1);
        }
        return items;
    }
    
    console.log(...filter([2, 4, 5, 8, 1, 9, 3], [3, 5, 8, 7]));
        2
  •  1
  •   Code Maniac    6 年前

    let dataArray = [2,4,5,8,1,9,3];
    let blackList = [3,5,8,7];
    
    let op = dataArray.filter(e=> !blackList.includes(e))
    
    console.log(op)

    blackList

    let dataArray = [2,4,5,8,1,9,3];
    let blackList = {3:false,5:false,8:false,7:false};
    
    let op = dataArray.filter(e=> blackList[e] !== false)
    
    console.log(op)