#javascript #arrays
Вопрос:
Может ли кто-нибудь подсказать мне, как найти элемент в массиве?
Я всегда получаю ложь для существующих элементов.
Спасибо.
arr = new Array;
arr.push({x: "a", y: 1});
arr.push({x: "b", y: 2});
arr.push({x: "c", y: 3});
elem = {x: "c", y: 3};
if (arr.includes(elem)){
console.log('true');
} else {
console.log('false');
}
Комментарии:
1. JSON-это «Обозначение объектов JavaScript». JSON-это строковое представление объектов JavaScript. Здесь нет JSON.
2. извините за мою ошибку.
Ответ №1:
Вы ищете {x: "c", y: 3}
объект внутри arr
, и он никогда не будет равен ни одному другому объекту, потому {} !== {}
что .
Помните: объект сравнивается со ссылкой, но примитивы проверяются по их значению.
В своем коде вы проверяете ссылку на объект с другой ссылкой, которая не равна, поэтому она регистрируется false
.
Если есть массив чисел, то вы должны использовать includes как:
const arr = [10, 20, 30];
if(arr.includes(20)) console.log("true");
else console.log("false");
Вы можете использовать функцию найти, чтобы найти элемент в массиве
const arr = new Array();
arr.push({ x: "a", y: 1 });
arr.push({ x: "b", y: 2 });
arr.push({ x: "c", y: 3 });
const elem = { x: "c", y: 3 };
if (arr.find((o) => o.x === elem.x amp;amp; o.y === elem.y)) {
console.log("true");
} else {
console.log("false");
}
Комментарии:
1. Спасибо за вашу быструю и замечательную помощь, есть ли другой более простой способ поиска или это единственный вариант?
2. Это самый прямой и простой метод проверки наличия в массиве объектов.
3. Отлично, большое вам спасибо, хорошего дня, с наилучшими пожеланиями.
4. Примечание по касательной:
find
возвращаетundefined
или найденный элемент. Найденный элемент , скорее всего, будетtruthy
, но обычно вы используетеfind
его для получения элемента и можете использовать.some
для проверки на наличие. Массив.прототип.некоторые против массива.прототипа.найти5. @HR01M8055
.find
вернет найденный элемент илиundefined
(ложное значение, но не ложное). Вы также можете придумать пример, в котором он возвращаетundefined
значение whenundefined
в массиве (таким образом, существует значение, соответствующее предикату и.some
возвращающее значение true, но.find
возвращающее неопределенное). Я хочу сказать, что выбор информативен для читателя кода относительно того, что от него требуется: хотите ли вы проверить наличие каких-либо совпадений, получить первое совпадение, получить все совпадения или проверить, все ли совпадают? Используйте инструмент, который наиболее точно соответствует намерению.
Ответ №2:
поскольку вы работаете с 2d-массивом , я полагаю, что ваш объект всегда будет одинаковым для X и Y, поэтому я предлагаю вам создать подобную функцию для дальнейшего использования в вашем коде
arr = new Array;
arr.push({x: "a", y: 1});
arr.push({x: "b", y: 2});
arr.push({x: "c", y: 3});
elem = {x: "c", y: 3};
console.log(findXY(arr,elem))
function findXY(arr,val){
return arr.find(each=>{
return each.x == val.x amp;amp; each.y == val.y
})
}