Привет, друзья! У меня возникла небольшая проблема с обработкой массива объектов в JavaScript. Есть массив, в котором каждый объект содержит разные ключи. Мне нужно оставить только определенные ключи, а остальные удалить. Вот пример:
let исходныйМассив = [
{ оставить1: 'раз', оставить2: 'два', удалить1: 123, удалить2: 456 },
{ оставить3: 'три', оставить4: 'четыре', удалить3: 789, удалить4: 101112 }
];
let списокНужныхКлючей = ['оставить1', 'оставить2', 'оставить3', 'оставить4'];
// Нужно получить такой результат:
let результат = [
{ оставить1: 'раз', оставить2: 'два' },
{ оставить3: 'три', оставить4: 'четыре' }
];
Как лучше это сделать? Хотелось бы избежать простого перебора массива и создания нового. Может, есть какой-то элегантный способ? Заранее спасибо за помощь!
есть простой способ решить эту задачу с помощью метода map() и оператора (…). вот как это можно сделать:
let результат = исходныйМассив.map(obj => {
return Object.fromEntries(
Object.entries(obj).filter(([key]) => списокНужныхКлючей.includes(key))
);
});
этот код пройдется по каждому объекту в массиве, отфильтрует только нужные ключи и создаст новый объект только с этими ключами. получится именно то, что тебе нужно без лишнего кода и перебора. надеюсь, это поможет! если что-то непонятно, спрашивай.
Можно решить эту задачу используя reduce() и Object.keys(). Вот пример:
const результат = исходныйМассив.reduce((acc, obj) => {
const filteredObj = Object.keys(obj).reduce((filtered, key) => {
if (списокНужныхКлючей.includes(key)) filtered[key] = obj[key];
return filtered;
}, {});
return [...acc, filteredObj];
}, []);
Этот подход эффективен, так как проходит по массиву только один раз. Он также избегает создания промежуточных массивов, что может быть полезно при работе с большими данными.
А можно просто использовать Object.assign() с пустым объектом и списком нужных ключей. Типа так:
результат = исходныйМассив.map(obj =>
Object.assign({}, …списокНужныхКлючей.map(key =>
key in obj ? { [key]: obj[key] } : {}
))
);
Получается коротко и ясно. И работает быстро даже на больших массивах. Что скажешь, попробуешь?