【问题标题】:ES6 .some() with the ternary operator behaves differently带有三元运算符的 ES6 .some() 行为不同
【发布时间】:2019-07-30 01:20:10
【问题描述】:

我注意到 .some() 数组方法和三元运算符的奇怪行为。

当整数(计数)必须在每个有和没有大括号的情况下递增时,它的行为会有所不同。

虽然,console.log 在每次迭代中都会显示正确的真值。

有什么想法吗?

> let arr = ['011','202','3300']
undefined
> let count = 0;
undefined
> arr.some(k => k.includes('0') ? count++ : null);
true
> count;
2 // is not correct
> count = 0;
0
> arr.some(k => {k.includes('0') ? count++ : null});
false
> count;
3 // correct 
>
> arr.some(k => {k.includes('0') ? console.log('true') : null});
true
true
true
false
> arr.some(k => k.includes('0') ? console.log('true') : null);
true
true
true
false

【问题讨论】:

标签: javascript arrays node.js ecmascript-6


【解决方案1】:

让我们了解一下

为什么这个给出输出 2

arr.some(k => k.includes('0') ? count++ : null);

let count = 0;
let arr = ['011','202','3300']
arr.some(k => k.includes('0') ? count++ : null);

console.log(count)
  • 所以在第一次迭代时count++ 将返回 0,然后将值递增 1。(因为它是后递增)

  • 在第二次迭代时,它将返回值为 1,这是真的,然后递增 1。(因为你找到了一个真值,所以有些人会停止迭代)

为什么这个给出输出 3

arr.some(k => {k.includes('0') ? console.log('true') : null});

let count = 0;
let arr = ['011','202','3300']
arr.some(k => {k.includes('0') ? count++ : null});

console.log(count)
  • 在这里,您没有使用箭头函数的隐式返回,因此在每次迭代时,您最终都返回未定义。所以你的 some 将遍历所有元素,你得到的输出为 3。

只需添加一个 return 语句并查看更改。

let count = 0;
let arr = ['011','202','3300']
arr.some(k => { return k.includes('0') ? count++ : null});

console.log(count)

【讨论】:

  • 可以添加在{} 内没有返回任何内容,因此总是false。显然,自从您添加了该内容后,您就读心了
猜你喜欢
  • 2020-09-06
  • 2021-12-08
  • 2023-02-03
  • 2018-09-18
  • 2017-04-26
  • 1970-01-01
  • 2016-07-05
  • 2018-12-28
  • 2012-08-08
相关资源
最近更新 更多