2015-11-25 6 views
0

Вот два объектов названных primary и secondary:Использования удалить свойство, не затрагивая родительский объект

var primary = {"gonna":3,"lol":114,"wouldn":2,"know":6,"lowkey":2,"man":5}; 
var secondary = primary; 

Когда я использую delete secondary['lol']; удаляет свойство из двух объектов: jsfiddle

Моего вопроса: как для удаления свойства от secondary без удаления его из primary?

+1

Вы назначаете _reference_ первичной к вторичной переменной. Это все еще один объект в памяти. Для достижения желаемого поведения вам необходимо клонировать основной. – Tommi

+0

Скорее всего, это дубликат. Я уверен, что этот вопрос уже задан. – rottenoats

+0

OP должен знать, что проблема была вызвана не первым копированием объекта, прежде чем зная, как искать клонирование объекта. Кроме того, это объект здесь, а не массив. – Merott

ответ

4

secondary ссылается на тот же объект, что и primary. Вам нужно создать копию primary, если вы хотите сохранить их отдельно.

Существуют библиотеки типа Lodash, которые имеют функции утилиты, позволяющие клонировать объект (ниже пример), но there are other ways too.

var primary = {"gonna":3,"lol":114,"wouldn":2,"know":6,"lowkey":2,"man":5}; 
 
var secondary = _.clone(primary); 
 

 
delete secondary.lol; 
 

 
document.write(JSON.stringify(primary)); 
 
document.write('<br>'); 
 
document.write(JSON.stringify(secondary));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>

2

Создание скрипку означает создать рабочую скрипку, а не просто вставить код

http://jsfiddle.net/Lso7kwLs/

Клонирование объекта вам помочь. Например:

var secondary = JSON.parse(JSON.stringify(primary)); 
1

Вы должны попробовать:

var primary = {"gonna":3,"lol":114,"wouldn":2,"know":6,"lowkey":2,"man":5}; var secondary = $.extend({}, primary); delete secondary['lol'];

Смежные вопросы