Элемент поиска в массиве объектов

#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 значение when undefined в массиве (таким образом, существует значение, соответствующее предикату и .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
  })
}