【问题标题】:Filtering an Array Within an Array在数组中过滤数组
【发布时间】:2018-06-02 12:48:33
【问题描述】:

我正在做一个 FreeCodeCamp 挑战,“寻找并销毁”,我在其中创建了一个从提供的数组中删除元素的函数。

给定

function destroyer(arr) {
// Remove all the values
destroyer([1, 2, 3, 1, 2, 3], 2, 3);

结果应该是

[1, 1]

虽然我已经看到了各种解决方案,但我希望能够使我一直在研究的解决方案能够发挥作用,因为它对我来说很直观,并且希望能引导我更好地理解过滤。我认为我的解决方案不起作用的原因是我没有正确使用该方法。

filter();

无论如何,这是我的尝试:

function destroyer(arr) {
// Remove all the values
var args = Array.prototype.slice.call(arguments);
//makes the arguments an array

function destroy(value) {


for (var i=1; i < args.length; i++) 
return value !==args[i];
// creates a loop that filters all arguments after the first one and removes from the initial argument, regardless of how many there are. 

}

var filtered = arr.filter(destroy);
return arr[0];
}


destroyer([1, 2, 3, 1, 2, 3], 2, 3);

我注意到了

var filtered = arr.filter(destroy);

可能是问题,因为最初的三个参数被过滤了,但不是第一个参数。但是,如果我尝试这样做

var 过滤 = arr[0].filter(destroy); 我认为会针对第一个参数,抛出一个错误。 是否可以通过这种方式解决问题?我想这样做是因为我喜欢以下功能的设置方式:

function badValues(val){  
 return val !== 2;   
}

function bouncer(arr) {
  return arr.filter(badValues);  
}

bouncer([1, null, NaN, 2, undefined]);

并且想用 2 代替需要删除的参数。

谢谢大家!

【问题讨论】:

  • 可能是这样的? function destroyer() { let args = Array.from(arguments); let array = args[0]; args.shift(); return array.filter(e =&gt; !args.includes(e)) }
  • 你的 destroyer() 函数只接受一个参数,但你传递了三个参数。
  • 您的实施存在几个问题。例如,您的 destroy 函数在第一次迭代时返回。了解 findfilter 等 javascript 内置函数将使您的代码更简洁、更智能、更具可读性。

标签: javascript arrays filter arguments


【解决方案1】:

This 是一个工作示例,如果你想自己发现解决方案,请不要阅读它,如果你真的想解决这个问题并学习,你需要readfilter 是如何工作的。你很接近。

function destroyer(arr) {
  var args = Array.prototype.slice.call(arguments);

  var filtered = arr.filter(destroy);  

  // you must return the filtered array
  return filtered;

  function destroy(value) {    
    for (var i=1; i < args.length; i++){

      // you must return false if you find it so filter removes the value
      if (value === args[i]) return false;
    }

    // if you loop through all and don't find it, return true so filter keeps the value
    return true;
  }
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

【讨论】:

  • 好的,谢谢!我确实尝试阅读过滤器的工作原理,但我很难理解。我特别困惑,因为在类似的问题中, function badValues(val){ return val !== false && val !== null && val !== 0 && val !== "" && val !== undefined && !Number .isNaN(val); } 功能保镖(arr){返回arr.filter(badValues);保镖([1,空,NaN,2,未定义]);该函数在不使用 true 和 false 删除值的情况下工作。
  • 实际上布尔值参与了该解决方案。当您使用“!==”时,您使用的是比较运算符,所有带有该运算符的句子都返回一个布尔值。 Operators.
猜你喜欢
  • 2020-02-07
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2017-02-14
  • 2016-03-28
  • 2019-01-18
相关资源
最近更新 更多