【问题标题】:why got it this result in array.filter, lambda? javascript为什么在array.filter,lambda中得到这个结果? javascript
【发布时间】:2020-03-24 04:22:31
【问题描述】:

为什么在array.filter 中得到这个结果?为什么函数返回偶数?函数内的第一个元素 (2%2) 等于 0, 0 - 1 = -1 是一个负数。应该过滤负数。

var c = new Array(1, 2, 3, 4, 5, 6);

var b = c.filter(function(a) {

return (a % 2) - 1;

});

//output [2,4,6]

没看懂,请帮帮我

其他例子

let c = new Array(10, 20, 30, 40, 50, 60, 70, 80);
var b = c.filter(function(a) {
  return (a % 20) - 10; // but if it is 9, it returns the whole list, it does not filter anything.
});

console.log(b); // [ 20, 40, 60, 80 ]

【问题讨论】:

  • 0 是 falsy-1 不是。
  • 负数计算为真。打开浏览器控制台,试试这个:!!0!!(-1)
  • 要明确一点,!! 是双重否定,当您使用 ! 时,一旦您“否定”变量,将 true 更改为 false 并将 false 更改为 true。但是如果你做 2 次,你就会回到原来的值。问题是,如果原始值不是布尔值,对它取反两次将得到一个布尔值,因为否定接受多种类型的参数,但总是返回一个布尔值。
  • Flasy Values, @StackSlave 你能分享一下 -1 被认为是假值的文档吗?

标签: javascript arrays function lambda filter


【解决方案1】:

% 是余数(如果你除以右边的数字) 运算符。 oddNumber % 2 总是产生余数 11 - 1 === 0 是假的。 evenNumber % 2 是余数 00 - 1 === -1,这是真的。当然,我假设您在数组中使用的是正数,而不是负数。

【讨论】:

  • oddNumber % 2 always produces a remainder 非常正确。但余数将始终为1therefore that remainder - 1不。 1-1 = 0 这肯定是一个假值。
  • 仅考虑+ve numbers。你可以解释我为什么不正确AGAIN
  • 出于某种原因,我假设-1 是假的。我的错,我把你们的两个 cmets 都奖励给了最高分。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多