te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Filtering even numbers from an array - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Filtering even numbers from an array - Stack Overflow

programmeradmin3浏览0评论

I would like to filter an array containing zeros (0) whilst capturing them too:

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
  if (x % 2 === 0 || x === 0) {
    return x;
  }
})

console.log(evens);

I would like to filter an array containing zeros (0) whilst capturing them too:

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
  if (x % 2 === 0 || x === 0) {
    return x;
  }
})

console.log(evens);

Why do I NOT get zero back in my evens array? If zero is not classed as even, shouldn't my:

|| x === 0

statement catch the zero?

Share Improve this question edited Feb 22, 2023 at 8:04 Tomerikoo 19.4k16 gold badges54 silver badges67 bronze badges asked Aug 16, 2018 at 11:48 newcasionewcasio 2531 gold badge7 silver badges17 bronze badges 3
  • 3 This is not how Array.filter works. The callback needs to return a boolean. – Jeto Commented Aug 16, 2018 at 11:49
  • 1 You want to return true rather than x – eddiewould Commented Aug 16, 2018 at 11:49
  • Possible duplicate of Understanding JavaScript Truthy and Falsy – str Commented Aug 16, 2018 at 11:50
Add a ment  | 

6 Answers 6

Reset to default 8

You need to return true or false from the Array#filter function. Based on the return value it will populate the returned array. Because conditions return boolean, you can just set the return value to the condition.

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
   return x % 2 === 0;
})

console.log(evens);

Even more shorter syntax with arrow function

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(x => x % 2 === 0);

console.log(evens);

Return true/false from inside of filter:

var arr1= [-200,-163, -26, -4, 0, 7,76];

var evens = arr1.filter(function(x){
  return x%2 === 0 || x === 0
})

console.log(evens);

In your code when you return 0, filter will consider it "falsy" and hence you don't get 0 inside your filtered Array.

Because 0 is considered a "falsy" value.

Your filter function is essentially returning false for 0 and filtering it from the array.

Check this out for a deeper look.

Array filter expects return as boolean value not number
If you need value in result it should be true else false;
0 is considered a false value.

you can return true in your function

var arr1 = [-200, -163, -26, -4, 0, 7, 76];

var evens = arr1.filter(function(x) {
  if (x % 2 === 0 || x === 0) {
    return true;
  }
})

console.log(evens);

const myEvennessFilter = (args) => args.filter(elem => (elem % 2) === 0);
console.log(myEvennessFilter([1,2,3,4,5,6,7,8,9]));

To make it Run Up to 25% Faster, replace elem % 2 == 0 with (elem & 1) === 0:

// how to filter out even numbers using filter() in js
let numbers = [1,2,3,4,5,6,7];
let even_numbers = numbers.filter(elem => elem%2 == 0)

发布评论

评论列表(0)

  1. 暂无评论