Как добавить суффикс для дублирования массива объектов с помощью JavaScript?Javascript

Форум по Javascript
Ответить
Anonymous
 Как добавить суффикс для дублирования массива объектов с помощью JavaScript?

Сообщение Anonymous »

У меня есть следующий массив объектов

Код: Выделить всё

let views = [
{
name: "A View",
active: true,
},
{
name: "B View",
active: false,
},
{
name: "C View",
active: false,
}
];
При добавлении других элементов один за другим с существующим именем, например, еще одного «Представления» и еще одного «Представления», как например

Код: Выделить всё

{
name: "A View",
active: true,
}
Я хочу добавить номер суффикса к имени в порядке подсчета, поэтому у меня есть

Код: Выделить всё

[
{
name: "A View",
active: true,
},
{
name: "B View",
active: false,
},
{
name: "C View",
active: false,
},
{
name: "A View 2",
active: true,
}
]
после добавления первого нового «Вид»
И

Код: Выделить всё

[
{
name: "A View",
active: true,
},
{
name: "B View",
active: false,
},
{
name: "C View",
active: false,
},
{
name: "A View 2",
active: true,
},
{
name: "A View 3",
active: true,
}
];
после добавления второго элемента «A View» и т. д.
Я затем удаляю «A View 2»? Я хочу, чтобы суффикс «2» был доступен добавить для нового «Вид», если я его добавлю. Таким образом, следующим элементом «Вид» будет «Вид 2», а не «Вид 4».
Это мое текущее решение

Код: Выделить всё

const addItem = (item) => {
views = [...views, item];
let names = {};

views.forEach((obj) => {
if (names[obj.name]) {
obj.name += " " + ++names[obj.name];
} else {
names[obj.name] = 1;
}
});

console.log("views", views);
};
Проблема в том, что суффикс добавляется неправильно.
Если я вызываю функцию 3 раза, передавая один и тот же объект, как, например,

Код: Выделить всё

addItem({
name: "A View",
active: true,
});
У меня будет это
Изображение

Вот рабочий пример — https://codesandbox.io/p/sandbox/8dhpl3

Подробнее здесь: https://stackoverflow.com/questions/793 ... javascript
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»