繁体   English   中英

具有三元运算符的ES6 .some()行为不同

[英]ES6 .some() with the ternary operator behaves differently

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

当在每个有和没有大括号的真实情况下必须增加integer(count)时,它的行为会有所不同。

虽然,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

让我们了解一下

为什么这个给输出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。(因为它是post增量)

  • 在第二次迭代中,它将返回值为1的true值,然后将其递增1。(由于您发现了一个true值,因此某些值将停止迭代)

为什么这个给输出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) 

  • 在这里,您没有利用箭头函数的隐式返回,因此在每次迭代中最终都返回未定义。 因此您的一些元素将遍历所有元素,并以3的形式输出。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM