1 Востаннє редагувалося Betterthanyou (06.02.2018 18:00:02)

Тема: Копіювання об'єктів, вибрати поля

Є об'єкт fields його потрібно захистити від змін (потрібний оригінал і новий об'єкт), для цього роблю копію за допомогою fieldsCory = Object.assign(fields), після копіювання
можна знову використовувати об'єкт fields (тому що є копія яку можна буде відновити...)

var fields =
    {
        field1:'1',
        field2:'2',
        field3:'3',
        field4:'4',
        field5:'5',
    };

Коли потрібно відновити копію, мені потрібні не всі "старі" поля, а наприклад лише 1-4, а 5 поле нехай залишиться "нове", тут виникає незручність, приходиться спочатку присвоювати 5 поле для копії,

fieldsCory.field5 = fields.field5;

а потім вже копію присвоювати оригіналу

fields = fieldsCory;

Пробував

Object.assign({}, fields, {field5: null });

але не допомогло, тому що коли я присвоюю fields копію fieldsCory, то і field5=null також присвоюється...(а потрібно що залишилося "нове" поле)

Як скопіювати деякі поля об'єкта, а потім відновити їх ?

2

Re: Копіювання об'єктів, вибрати поля

я б пройшовся циклом по тих ключах, які потрібно відновити і по тих ключах, які повинні мати нові значення і створив б для цього новий обєкт. Навіщо мучати існуючі обєкти, які між собою мають проперті, які до того ж переплетені по посиланнях. це лишня робота

var keyIndex={
 field1:true,
  ...,
 field4:true,
 field5:false
};

var newObj={};
$.each(keyIndex ,function(key,flag){
   newObj[key]=flag? fieldsCory[key]: fields[key];
});

console.log(newObj);
Подякували: Betterthanyou1

3

Re: Копіювання об'єктів, вибрати поля

let obj = {
        field1:'1',
        field2:'2',
        field3:'3',
        field4:'4',
        field5:'5',
    };
const copy = {...obj};
obj.field5 = 'new field';
obj = {...copy, field5: obj.field5};
Подякували: Betterthanyou1