簡體   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