ES6 .some () с троичным оператором ведет себя по-разному - PullRequest
1 голос
/ 08 марта 2019

Я заметил странное поведение метода массива .some () и троичного оператора.

Он ведет себя по-разному, когда целое число (число) должно увеличиваться в каждом истинном случае с фигурными скобками и без них.

Хотя console.log показывает правильное значение true на каждой итерации.

Есть мысли?

> 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 Ответ

2 голосов
/ 08 марта 2019

Давайте разберемся в этом

Почему этот вывод дает 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)
  • Здесь вы не используете неявный возврат функции стрелки, поэтому на каждой итерации вы в конечном итоге возвращаете undefined.так что некоторые из вас будут перебирать все элементы, и вы получите выходное значение 3.

Просто добавьте оператор return и посмотрите изменения.

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

console.log(count)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...