Вам необходимо создать новый obj
объект для каждой итерации, поэтому его объявление и инициализация должны go внутри l oop:
const data = [
{ name: "Incident Request", sys_id: 1 },
{ name: "Incident Request", sys_id: 2 },
{ name: "Incident Request", sys_id: 1 },
{ name: "Incident Request", sys_id: 4 },
{ name: "Incident Request", sys_id: 2 },
{ name: "Incident Request", sys_id: 1 },
{ name: "Incident Request", sys_id: 2 },
{ name: "Incident Request", sys_id: 3 },
];
const arr = [];
data.forEach((item) => {
const name = item.name.toString();
const sys_id = item.sys_id.toString();
// Check if there's already an entry for this `sys_id` and do nothing in that case:
if (arr.find(cursor => cursor.sys_id === sys_id)) return;
// Here we are not reusing a single object, but creating a new one on each iteration:
arr.push({ name, sys_id });
});
console.log(arr.map(({ name, sys_id }) => `${ name } - ${ sys_id }`));
.as-console-wrapper {
max-height: 100% !important;
}
В противном случае вы всегда обновляете один и тот же объект и добавляете его на дополнительную позицию в arr
. Поскольку все позиции ссылаются на один и тот же объект, каждое обновление, которое вы выполняете для него, влияет на все из них, поэтому вы будете видеть только значения последней итерации, повторяющиеся несколько раз:
const data = [
{ name: "Incident Request", sys_id: 1 },
{ name: "Incident Request", sys_id: 2 },
{ name: "Incident Request", sys_id: 3 },
{ name: "Incident Request", sys_id: 4 },
{ name: "Incident Request", sys_id: 5 },
{ name: "Incident Request", sys_id: 6 },
{ name: "Incident Request", sys_id: 7 },
{ name: "Incident Request", sys_id: 8 },
];
const arr = [];
const obj = {};
data.forEach((item) => {
// Update the existing object (always the same object):
obj.name = item.name.toString(),
obj.sys_id = item.sys_id.toString(),
// And add it one more time to the array:
arr.push(obj);
});
console.log(arr.map(({ name, sys_id }) => `${ name } - ${ sys_id }`));
.as-console-wrapper {
max-height: 100% !important;
}