Добавить свойство к общим элементам в массиве и массиве объектов - PullRequest
1 голос
/ 04 августа 2020

У меня есть массив, например ['A','B','F'], и массив объектов

[
    {
        name:'A',
        prop1:'value1'
    },
    {
        name:'C',
        prop3:'value3'
    },
    {
        name:'E',
        prop7:'value7'
    },

]

Я хочу отфильтровать объекты, в которых имя существует в массиве, и добавить свойство exists:true в массив объектов и вернуть обновленный массив объектов.

Итак, для приведенного выше случая он должен вернуть

[
    {
        name:'A',
        prop1:'value1',
        exists:true
    },
    {
        name:'C',
        prop3:'value3'
    },
    {
        name:'E',
        prop7:'value7'
    },

]

Я полагаю, это можно сделать с помощью JavaScript Наборов, но не знаю, как это сделать. Также можно ли это сделать в линейной сложности?

1 Ответ

0 голосов
/ 04 августа 2020

Чтобы достичь линейной временной сложности, вы можете превратить свой массив символов в Set. Теперь просто l oop через массив объектов.

const characters = ['A','B','F'];

const objects = [
    {
        name:'A',
        prop1:'value1'
    },
    {
        name:'C',
        prop3:'value3'
    },
    {
        name:'E',
        prop7:'value7'
    },
];

const charSet = new Set(characters);

const output = objects.map(obj => {
    if (charSet.has(obj.name)) obj.exists = true;
    return obj;
});

Это принимает O(n + m), где n - длина массива символов, а m - длина массива объектов.

...