#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-е совпадение.