Как работает оператор OR в функции поиска в javascript или typescript?

#typescript

#typescript

Вопрос:

Если у меня есть массив объектов:

 myArray = [
  {id:123, name:"abc"},
  {id:234, name:"xyz"},
  {id:345, name:"pqr"}
]

someValue = 123
someOtherObj = {id: 234}

let matchedObj = this.myArray.find(object=> object.id === somevalue || object.id === someOtherObj.id) 
console.log(matchedObj)
  

Будет ли вывод 123 каждый раз, или это может быть 123 или 234? Можете ли вы объяснить, как это работает?

Ответ №1:

find находит первую соответствующую запись в массиве. condition1 || condition2 является истинным, если либо condition1 , либо condition2 является истинным. (Более конкретно: || сначала вычисляет свой левый операнд и, если этот результат соответствует действительности, принимает это истинное значение в качестве своего результата; если левый результат является ложным, || вычисляет свой правый операнд и принимает это значение в качестве своего результата.)

Таким образом, с этим образцом данных он всегда будет соответствовать первой записи, потому что он соответствует условию и находится перед второй записью (которая также соответствует условию). Но если бы записи были в другом порядке, где id: 234 были перед id: 123 , вместо этого он нашел бы эту:

 const someValue = 123;
const someOtherObj = {id: 234};

function match(array) {
    console.log(array.find(object => object.id === someValue || object.id === someOtherObj.id));
}

match([
    {id:123, name:"abc"}, // Finds this one
    {id:234, name:"xyz"},
    {id:345, name:"pqr"}
]);
match([
    {id:345, name:"pqr"},
    {id:234, name:"xyz"}, // Finds this one
    {id:123, name:"abc"}
]);  

Комментарии:

1. Ти Джей Краудер спасибо за ответ. Я предполагаю, что порядок моего массива — это причина, по которой я некоторое время получал 2-е совпадение.