Как сопоставить пару ключ-значение для каждого индекса в объекте - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь добавить новую пару ключ-значение в мой объект, используя карту. Это просто пустой массив, поэтому я могу добавить в него sh объекты позже.

Вот мой код:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

let output = columns.map(() => ({posts: []}));

console.log(output)

вот как я хочу, чтобы мой объект выглядел после отображения:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25,
        posts: []
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5,
        posts: []
    }
];

Но текущий вывод:

[
    {
        posts: []
    },
    {
        posts: []
    }
]

Ответы [ 3 ]

2 голосов
/ 06 апреля 2020

Ваш код не работает, потому что новый массив будет содержать именно то, что возвращает функция mapper.

Даже если он не имеет ничего общего с содержимым исходного массива, его возвращаемое значение останется нетронутым.

Итак, если вы вернете объект {posts:[]}, он будет выходным.

Вы должны объединить этот объект в текущий элемент массива внутри функции сопоставления.


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

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

columns.map(obj => ({...obj, posts: []}));

Однако это относительно новая функция, поэтому, если вам нужна более широкая поддержка, вы можете использовать Object.assign:

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];

columns.map(obj => Object.assign({posts: []}, obj));
0 голосов
/ 06 апреля 2020

с использованием forEach () ;

columns.forEach(el => el.posts=[] )

let columns = [
    {
        _id: "5e8af4591c9d440000a1a4ed",
        column_name: "Opportunities",
        column_value: 0,
        column_percentage: 0.25
    },
    {
        _id: "5e8af4a81c9d440000a1a4ee",
        column_name: "Prospects",
        column_value: 0,
        column_percentage: 0.5
    }
];
columns.forEach(el => el.posts=[] )

console.log(columns)
0 голосов
/ 06 апреля 2020

Вы можете попробовать:

let newColumns = columns.map((item) => Object.assign({}, item, {posts: []});  
console.log(newColumns);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...