#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
Заранее прошу прощения, не смог придумать лучшего примера для данных.
Итак, у меня есть массив things
, который в настоящее время состоит только из объектов, содержащих id
свойство, и массива, который просто содержит случайные вещи / слова, которые я мог бы внезапно придумать, и other_things
, с некоторыми случайными словами из things
массива.
let things=[
{
id: 1,
names: ['car','door','chair']
},
{
id: 2,
names: ['cat','dog','door']
},
{
id: 3,
names: ['phone','mouse','cat']
},
{
id: 4,
names: ['building','desk','pen']
},
{
id: 5,
names: ['road','date','number']
}
];
let other_things=['car','door','pen'];
Чего я хотел бы добиться, так это отфильтровать массив things
и получить только те объекты / элементы, где names
массив содержит хотя бы один элемент из other_things
массива.
В этом примере только things[2]
и things[4]
не имеют совпадений ни с какими словами из other_things
, поэтому они нам не нужны.
Я уже перепробовал много вещей, например, комбинирование методов ES6, например filter
, every
или map
, пробовал использовать вложенные for
циклы, но, к сожалению, у меня ничего не получилось.
Комментарии:
1.
const other = { car: true, door: true, pen: true }; /* can be generated from array */ let result = things.filter(({ names }) => names.some(e => other[e] ?? false ));
Если ваши предметы не являются строками, используйте вместо этого карту или просто сделайте что-нибудь дешевое, напримерincludes
,indexOf
ither_things
напрямую, если у вас есть в лучшем случае всего пара десятков или сотен предметов.2. Tbh, для проверки структуры даже набора должно быть достаточно, вас не волнует порядок вставки или что-то в этом роде.
Ответ №1:
let things=[
{
id: 1,
names: ['car','door','chair']
},
{
id: 2,
names: ['cat','dog','door']
},
{
id: 3,
names: ['phone','mouse','cat']
},
{
id: 4,
names: ['building','desk','pen']
},
{
id: 5,
names: ['road','date','number']
}
];
let other_things=['car','door','pen'];
console.log(things.filter(t => t.names.filter(n => other_things.includes(n)).length > 0))