Запись имеет старый цвет/число и новые свойства, которые можно изменить. Я хочу перебрать массив и проверить, не совпадают ли старые и новые значения. Если они этого не сделают, я бы хотел определить, какое свойство было изменено (цвет/число), установить свойство измененной записи и нажать на массив. Если запись имеет изменения как для цвета, так и для номера, мне нужна копия каждой записи массива с другим измененным свойством.Array Push Overwrite
Я пробовал несколько разных способов, и нажатие перезаписывает измененное свойство, независимо от того, что я делаю. Я попытался использовать локальный массив, и это тоже не сработало. Вот пример.
export class Record {
id: string;
oldcolor: string;
newcolor: string;
oldnumber: string;
newnumber: string;
changed: string;
}
@Input() newrecords: Record[];
output: Record[] = [];
functionTest() {
for (let rec of this.newrecords) {
if (rec.newcolor != rec.oldcolor) {
rec.changed = "color";
output.push(rec);
}
if (rec.newnumber != rec.oldnumber) {
rec.changed = "number";
output.push(rec);
}
}
}
desired result
[{
id: 1;
oldcolor: red;
newcolor: red;
oldnumber: 6;
newnumber: 6;
changed: color;
},
{
id: 1;
oldcolor: red;
newcolor: red;
oldnumber: 6;
newnumber: 6;
changed: number;
}]
Спасибо, Марк, что сработало. Какие из наиболее эффективных способов вы упомянули? – meli02
Ну, на самом деле просто размышлять, я думаю ... это зависит от того, что вы делаете с массивом, как только вы его создали. Если вы кормите, скажем, хранилище данных для сетки пользовательского интерфейса, которое должно показывать данные определенным образом, тогда другого способа не может быть. OTOH, если вы передаете это для обработки в функцию, которую вы контролируете, и поэтому можете определить структуру любым способом, например, имея значение для 'changed = 'both''; или позволяя значение 'changed' быть массивом (' changed: ["color", "number"] ') может сохранять обработку (для копирования объектов) и памяти (для хранения копий). –