我坚持使用这种FreeCodeCamp算法

时间:2017-01-19 00:41:25

标签: javascript algorithm

function destroyer(arr) {
    // Remove all the values
    var toFilter;
    var toFrom;
    for(var i=0;i<arguments.length;i++) {
        if (typeof arguments[i]=="object") {
            toFilter = arguments[i];
        } else {
            toFrom = arguments[i];
        }
    }

    var result = toFilter.filter(function(value,index,array) {

        if(value===toFrom) {
            return true;
        }

        return result;

    });

    console.log(result);

}

destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return [1,1]

我试图解决这个算法差不多一周了。在这个任务中,我们需要删除初始数组中存在的参数值,他们已经提到过使用参数和filter方法来解决这个问题。我知道Javascript中的过滤器和参数是什么,我使用过滤器方法解决了以前的算法,我阅读了有关参数和它的使用但从未使用过它。每当我用这两个做某事时,它给了我一个空白的数组。请任何人都可以帮助我如何使用过滤器和参数来做到这一点?

3 个答案:

答案 0 :(得分:0)

只是我的想法,你可以按照你想要的方式修改它:

function isValid() {
  return value != 2 && value != 3;
}
var arr = [1, 2, 3, 1, 2, 3];
arr.filter(isValid); //It should return [1,1];

您现在需要的是从arguments对象获取2和3值并更改isValid函数。

答案 1 :(得分:0)

您可以做的是构建一个要从数组中删除的值的查找,然后通过返回查找中不存在的值来过滤原始数组:

function destroyer(arr) {
  var lookup = {};

  // For each remaining argument, add it to the lookup.
  for (var i = 0; i < arguments.length; i++) {
    lookup[arguments[i]] = true;
  }

  // Filter the array and return a new array
  // with elements that don't exist in the lookup.
  return arr.filter(function(elem) {
    return typeof lookup[elem] === 'undefined';
  });
}

console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3)); //it should return [1,1]

答案 2 :(得分:0)

有几个问题,让我们逐一列出:

  1. 你覆盖toFrom,所以你没有获得所有非对象(即2&amp; 3),而只是获得最后一个非对象(即3)
  2. filter()中,返回true表示“将此元素保留在列表中”,如果值等于{{1},则返回true }}
  3. 动词 solve 不适用于名词算法。因为算法解决 问题的方式
  4. 我没有尝试,但我猜您的代码会输出toFrom = 3,因此如果您想输出[3,3],请尝试根据您的版本修改以下代码:

    [1,1]

    或者您可以尝试我的版本:)

    function destroyer(arr) {
        // Remove all the values
        var toFilter;
        var toFrom = [];
        for(var i=0;i<arguments.length;i++) {
            if (typeof arguments[i]=="object") {
                toFilter = arguments[i];
            } else {
                // maintain a list of ALL non-objects which to be filtered
                toFrom.push(arguments[i]);
            }
        }
    
        var result = toFilter.filter(function(value,index,array) {
            if(toFrom.indexOf(value) != -1) {
                // If element is in the toFrom list, DO NOT keep it
                return false;
            }
    
            return true;
        });
    
        console.log(result);
    
    }
    
    destroyer([1, 2, 3, 1, 2, 3], 2, 3); // it should return