JQuery Сохранить JSON в две переменные, а затем слить только одну - PullRequest
1 голос
/ 18 января 2012

Я хочу сохранить Json в две переменные, чтобы я мог манипулировать одной и сохранить оригинал, когда мне нужно восстановить и сбросить данные до оригинала.

У Json 4 предмета. У меня есть две переменные, они изначально используют одни и те же данные, и я вижу, что они работают в консоли. Однако, когда я соединяю переменную «Current», переменная «Original» также как-то соединяется. Я просто хочу склеить, вытолкнуть и нажать на текущую переменную.

Моя цель - иметь два объекта и манипулировать только одним. Я не могу использовать куки или сервер.

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
<script type="text/javascript">

        var jsonOriginal;//used for the original json object
        var jsonCurrent;//used for the filtered json object that gets manipulated

        $.ajax({
          url: "sources/json.txt",
          dataType: 'json',
          success: (function(json) 
        { 
            //save the JSON into two variables for later use
             jsonOriginal = json;
             jsonCurrent= json;
             doSomething();
         })
        });


        function doSomething(){

            console.log(jsonOriginal);//has 4 items
            console.log(jsonCurrent);//has 4 items

            //Splice ONLY CURRENT
            jsonCurrent.items.splice(2, 3);//remove 2 items from jsonCurrent

            console.log(jsonOriginal);//has 2 items -- WHAT????
            console.log(jsonCurrent);//has 2 items as expected

            //reset Current to the Original
            jsonCurrent=jsonOriginal;//should go back to the 4 items

        }

</script>

1 Ответ

1 голос
/ 18 января 2012

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

var jsonOriginal = jQuery.extend(true, {}, json);

вместо

jsonOriginal = json;

Вероятно, было бы неплохо использовать тот же метод для копирования jsonOriginal обратно, когда вы хотите его вернуть.

...