如何过滤()出NaN时,NULL,0阵列中的假(JS) [英] How to filter() out NaN, null, 0, false in an array (JS)

查看:694
本文介绍了如何过滤()出NaN时,NULL,0阵列中的假(JS)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有人问我筛选出的为NaN,NULL,0,假阵列

幸运的是,我已经回答了这个问题。

Luckily I have answered the question.

function bouncer(arr) {
  function filterer(arr) {
     return arr > 0|| isNaN(arr) === true;
  }
  arr = arr.filter(filterer);
  return arr;
}

//example input
bouncer([0, 1, 2, 3, 'ate', '', false]); //output [1, 2, 3, 'ate']

但事情是我真的不知道我是怎么想出了答案或者说我不知道​​它是如何工作的。特别在改编> 0 并过滤怎么知道ARR上改编alread [1],编曲[2]等。不使用循环中的所有阵列中进行迭代。

but the thing is I really don't know how I came up with the answer or rather I don't know how it works. Specially on arr > 0 how did the filter know that arr is alread on arr[1], arr[2], etc.. without using a loop to iterate in all array.

或者可以简单地只是如何code ++工程解释。 [我试图解释清楚---]

or can simply just explain on how to code works. [I've tried to explain it clearly ---]

推荐答案

看的文档 Array.filter 。特别通知参数回调:

Look at the docs for Array.filter. Notice in particular the arguments to the callback:

函数来测试数组的每个元素。调用带参数(元素,索引数组)。返回true保持元素,否则为false。

Function to test each element of the array. Invoked with arguments (element, index, array). Return true to keep the element, false otherwise.

所以你的情况改编是元素(并命名很差,因此,你的困惑)。过滤器遍历阵列,并为每个项目它调用你的回调传入元素在当前位置为改编

So in your case arr is the element (and poorly named, hence your confusion). Filter loops through your array and for every item it calls you callback passing in the element at the current position as arr.

正如其他人在评论中所指出的那样,你的过滤器回调的逻辑是负值居然有缺陷的,但如果你知道你的阵列将永远不会包含负值,可能不是一个问题(但可能是一个危险的事情承担)。

As others have pointed out in the comments, the logic of your filter callback is actually flawed for negative values, but that may not be an issue if you know that your array will never contain negative values (but that can be a dangerous thing to assume).

和,当然,在内部,这是通过阵列循环。没有数组中接触的每个元素不能过滤(未排序)阵列。看看在链接的polyfil得到如何的的想法可能的工作(威力,因为这是与不同的JavaScript引擎不同,但无疑将涉及的循环,所以一个实现细节),它通过您的数组循环,调用回调(注意参数),如果回调返回true,它就会被压入一个结果数组。

And, of course, internally, this is looping through your array. You can't filter your (unsorted) array without touching each element in the array. Look at the polyfil in the link to get an idea of how it might work (might because this is an implementation detail that may differ with different javascript engines, but will no doubt involve a loop somewhere), it loops through your array, calls the callback (note the arguments) and if the callback returns true, it gets pushed onto a results array.

这篇关于如何过滤()出NaN时,NULL,0阵列中的假(JS)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆