6

Найти значение в массиве объектов на JavaScript

1

У меня есть массив анонимных объектов, в каждом из которых содержится массив именованных объектов. Мне нужно получить объект, у которого свойство "name" равно "string 1". Вот пример массива:

var array = [
    { name:"string 1", value:"this", other: "that" },
    { name:"string 2", value:"this", other: "that" }
];

Обновление: Должен был упомянуть об этом раньше, но после того как я найду нужный объект, я хочу заменить его на измененный объект.

5 ответ(ов)

14

Поиск элемента в массиве:

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 для замены нужного объекта.

3

Вы можете перебрать массив и проверить это свойство с помощью следующего кода:

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 совпадает с искомым значением.

2

В 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, чтобы заменить только один элемент, а не весь массив. Если вам нужно заменить объект, а не просто его значения, вы можете сделать это, сохранив структуру оригинального объекта и изменив лишь нужное поле.

0

Согласно спецификации ECMAScript 6, вы можете использовать функцию findIndex. Пример кода для поиска элемента массива по условию:

array[array.findIndex(x => x.name == 'строка 1')]

В этом примере findIndex вернет индекс первого элемента, у которого свойство name равно 'строка 1'. Если элемент не будет найден, функция вернет -1.

0

Вопрос: Как можно выполнить поиск по элементам в массиве объектов, используя предоставленный код?

Ответ: В вашем коде вы правильно создаете массив объектов, каждый из которых содержит свойства 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'.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь