ms-dred
@ms-dred
Вечно что то не то и что то не так...

Почему перезаписывается объект?

Столкнулся с проблемой и не могу понять почему перезаписывается объект.
Есть к примеру файл с дефолтовым объектом
schema.js
schema = {
    "price": {
        "min": 0,
        "max": 99999
    }
};
module.exports = schema;


В тестовом файле необходимо слить два массива, для этого я использую npm extend
var extend = require('extend');
var schema = require('./application/config/schema');

var used = {
    "price": {
        "min": 100,
        "max": 2000
    }
};

var clean = extend(true, schema.search, used);

console.log(schema);


В ответе schema получаю
price: { min: 100, max: 2000 }
Как запретить изменение содержимого schema?
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
AntiStream
@AntiStream
Потоковый программист
Насколько понимаю тут надо создать клон объекта, чтобы не изменить оригинал, видимо как то так:
var clean = extend(true, extend(true, {}, schema), used);


Ещё можно использовать Object.assign вместо npm extend:
console.log( Object.assign({}, schema, used) )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
keslo
@keslo
Почему в extend вы начинаете использовать schema.search, а не schema?
Очень показательно попробовать так:
var res = extend(true, {}, used, schema); // на выходе получаем замену значения объектом, который стоит правее

Вам что на выходе необходимо получить?

В официальной документации написано
Keep in mind that the target object will be modified, and will be returned from extend().
Целевой объект будет изменен и будет возвращен как результат extend()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы