Разница между findIndex () и some () в JavaScript - PullRequest
0 голосов
/ 04 июня 2018

Разница только в том, что, в то время как some() возвращает true, если хотя бы есть элемент, который проходит тест в функции обратного вызова, findIndex() возвращает индекс первого элемента, который проходит тест?

Или это еще один оптимальный вариант или он кроется в большем, чем я понимаю, потому что, если это единственное отличие, я мог бы просто получить индекс из findIndex() и проверить, равен ли он -1 или нет.

let foo = [
    {
'animal':'dog'
},    
 {
'animal':'cat'
},    
 {
'animal':'cow'
},    
]

foo.find( obj => obj.animal === 'cat' ) 
{animal: "cat"}
foo.some( obj => obj.animal === 'cat' ) 
true

1 Ответ

0 голосов
/ 04 июня 2018

findIndex и some действительно очень похожи, и вы можете легко использовать findIndex вместо some.Кроме того, find имеет аналогичную спецификацию.Но вы не можете легко использовать его для замены some, так как возвращаемое значение find - это найденный элемент или undefined, который вы не можете отличить от фактического элемента.

Однако есть небольшойразница между findIndex / find и some.См. Спецификацию some:

callbackfn вызывается только для тех элементов массива, которые действительно существуют;он не вызывается для отсутствующих элементов массива.

См. этот пример:

new Array(1).findIndex(() => console.log('called')); // prints 'called' once
new Array(1).some(() => console.log('called')); // does not print anything

Хотя это не должно быть актуально в большинстве приложений.

Причина, по которой эти функции существуют, и вы должны использовать их так, как они были указаны, - удобочитаемость.Вы всегда должны стремиться писать читаемый / обслуживаемый код.Конечно, вы можете написать [].findIndex(...) !== -1 вместо [].some(...), но последний явно более читабелен, так как имеет лучшую семантику по сравнению с тем, что он делает.

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