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

时间:2019-03-08 02:35:48

标签: javascript arrays node.js ecmascript-6

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

在每个带有和不带有大括号的真实情况下,必须对整数(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

1 个答案:

答案 0 :(得分:2)

让我们理解这一点

  

为什么这个给输出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,该值为true,然后递增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)

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

只需添加return语句并查看更改即可。

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

console.log(count)

相关问题