【问题标题】:How can i write this javascript filter arguments function right?我怎样才能编写这个javascript过滤器参数函数呢?
【发布时间】:2017-11-18 15:37:55
【问题描述】:
function terminate(arr) {
var args =[];
for(i=1;i<arguments.length;i++){
}


return arr.filter(e => e!=args[0]&& e!=args[1]&&e!=args[2]);
}

terminate([3, 5, 1, 2, 2], 2, 3, 5);

//terminate([3, 5, 1, 2, 2], 2, 3, 5) 应该返回 [1]

【问题讨论】:

  • 看到你已经在使用 es2015 ...function terminate(arr, ...args) =&gt; arr.filter(e =&gt; !args.includes(e));
  • 为什么要删除 for 循环的主体?
  • 顺便说一句,您的原始代码工作正常
  • 顺便说一句,代码仍然有效,那些只是 console.logs。我想通过循环来完成这部分 =>return arr.filter(e =&gt; e!=args[0]&amp;&amp; e!=args[1]&amp;&amp;e!=args[2]);,而不必自己选择 args 数组位置。

标签: javascript filter arguments


【解决方案1】:

正如 Jaromanda X 所建议的,如果您使用的是ES2015/ES6,那么这是最好的解决方案:

function terminate(arr, ...args) {
  return arr.filter(el => !args.includes(el));
}

编辑:对不起! Array.prototype.includes 不是ES2015/ES6 的一部分,它是ES2016 的一部分。如果您使用ES2015/ES6,则需要使用args.indexOf(el) === -1(如下一个示例)或!~args.indexOf(el)(使用Bitwise operator)作为过滤谓词函数。

对于ES5,这样的事情会起作用:

function terminate(arr) {
  var args = Array.prototype.slice.call(arguments, 1);
  return arr.filter(function (el) {
    return args.indexOf(el) === -1;
  });
}

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 1970-01-01
    • 2021-05-23
    • 2021-10-06
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多