Найти значение в массиве объектов на JavaScript
У меня есть массив анонимных объектов, в каждом из которых содержится массив именованных объектов. Мне нужно получить объект, у которого свойство "name" равно "string 1". Вот пример массива:
var array = [
{ name:"string 1", value:"this", other: "that" },
{ name:"string 2", value:"this", other: "that" }
];
Обновление: Должен был упомянуть об этом раньше, но после того как я найду нужный объект, я хочу заменить его на измененный объект.
5 ответ(ов)
Поиск элемента в массиве:
let arr = [
{ name: "string 1", value: "this", other: "that" },
{ name: "string 2", value: "this", other: "that" }
];
let obj = arr.find(o => o.name === 'string 1');
console.log(obj);
В приведенном выше коде мы используем метод find
для поиска объекта в массиве arr
, который имеет свойство name
равное 'string 1'
. Результат поиска будет сохранен в переменной obj
. Если такой объект существует, он будет выведен в консоль.
Замена элемента в массиве:
let arr = [
{ name: "string 1", value: "this", other: "that" },
{ name: "string 2", value: "this", other: "that" }
];
let obj = arr.find((o, i) => {
if (o.name === 'string 1') {
arr[i] = { name: 'new string', value: 'this', other: 'that' };
return true; // останавливаем поиск
}
});
console.log(arr);
В этом фрагменте кода мы также используем метод find
, но с дополнительной логикой для замены найденного элемента. Когда мы обнаруживаем объект с name
, равным 'string 1'
, мы заменяем его на новый объект с name
равным 'new string'
. Измененный массив arr
выводится в консоль. Обратите внимание, что мы используем индекс i
для замены нужного объекта.
Вы можете перебрать массив и проверить это свойство с помощью следующего кода:
function search(nameKey, myArray) {
for (let i = 0; i < myArray.length; i++) {
if (myArray[i].name === nameKey) {
return myArray[i];
}
}
}
const array = [
{ name: "string 1", value: "this", other: "that" },
{ name: "string 2", value: "this", other: "that" }
];
const resultObject = search("string 1", array);
console.log(resultObject);
В этой функции search
мы перебираем элементы массива myArray
, сравнивая значение свойства name
каждого объекта с заданным ключом nameKey
. Если находим совпадение, то возвращаем соответствующий объект. В приведенном примере при вызове search("string 1", array)
функция вернет первый объект из массива, так как его свойство name
совпадает с искомым значением.
В ES6 вы можете использовать метод Array.prototype.find(predicate, thisArg?)
таким образом:
array.find(x => x.name === 'string 1');
Это позволяет вам находить элемент массива по некоторому условию. Например, если вам нужно заменить найденный объект, вы можете использовать метод fill
и сделать это следующим образом:
let obj = array.find(x => x.name === 'string 1');
let index = array.indexOf(obj);
array.fill({...obj, name: 'some new string'}, index, index + 1);
Обратите внимание, что в этом примере я использовал оператор расширения {...obj}
для создания нового объекта на основе найденного, изменяя только свойство name
. Также стоит корректно указать диапазон с index + 1
, чтобы заменить только один элемент, а не весь массив. Если вам нужно заменить объект, а не просто его значения, вы можете сделать это, сохранив структуру оригинального объекта и изменив лишь нужное поле.
Согласно спецификации ECMAScript 6, вы можете использовать функцию findIndex
. Пример кода для поиска элемента массива по условию:
array[array.findIndex(x => x.name == 'строка 1')]
В этом примере findIndex
вернет индекс первого элемента, у которого свойство name
равно 'строка 1'. Если элемент не будет найден, функция вернет -1.
Вопрос: Как можно выполнить поиск по элементам в массиве объектов, используя предоставленный код?
Ответ: В вашем коде вы правильно создаете массив объектов, каждый из которых содержит свойства name
, value
и other
. Чтобы осуществить поиск элемента по имени, вы можете использовать метод find()
массива, как показано ниже:
var array = [
{ name: "string 1", value: "this", other: "that" },
{ name: "string 2", value: "this", other: "that" }
];
const search = what => array.find(element => element.name === what);
Функция search
принимает параметр what
и ищет элемент в массиве, сравнивая значение свойства name
. Если элемент найден, find()
вернет его, иначе вернет undefined
.
Чтобы проверить, найден ли элемент и вывести его значения, вы можете воспользоваться следующим кодом:
const found = search("string1");
if (found) {
console.log(found.value, found.other);
} else {
console.log('No result found');
}
Обратите внимание, что в вашем примере вы ищете "string1"
, но в массиве у вас есть "string 1"
. Вам следует убедиться, что строка, которую вы ищете, совпадает с тем, что находится в массиве. Чтобы исправить это, вы можете изменить строку поиска на "string 1"
.
Итоговый код будет выглядеть так:
const found = search("string 1");
if (found) {
console.log(found.value, found.other);
} else {
console.log('No result found');
}
Теперь, если элемент будет найден, вы получите его значения, иначе отобразится сообщение 'No result found'.
Сортировка массива объектов по значению строкового свойства
Получить объект JavaScript из массива объектов по значению свойства
Как получить уникальные значения из массива объектов в JavaScript?
Как очистить массив в JavaScript?
Выбор последнего элемента в массиве JavaScript