Удаление объекта JSON из массива создает «неопределенные» объекты - PullRequest
5 голосов
/ 26 мая 2010

У меня проблемы с JSON и массивами. Я некоторое время возился с JSON и пытаюсь использовать некоторые из них, производя рефакторинг старой реализации. У меня было два скрытых текстовых поля, одно хранилище идентификаторов в формате [1] [2] [3] и т. Д., А другое имя [name1] [name2] [name3], поэтому я подумал, что это будет отличным упражнением, чтобы узнать больше о JSON и рефакторинг, и использовать более удобочитаемую запись объекта.

Во всяком случае, я отвлекся. У меня странная проблема, я узнал, как «вставить» JSON в массив, но проблема заключается в моем методе удаления. Когда я удаляю объект из массива, запятые сохраняются, создавая «неопределенные» объекты. Я делаю это неправильно, и есть ли лучший способ?

Добавлено 2 элемента в массив (все в порядке)

[{id:"1", name:"Test (ID: 1)", status:"new"}, {id:"2", name:"Test 2 (ID: 2)", status:"new"}]

Удален 1 элемент из массива (оставлены запятые)

[{id:"1", name:"Test (ID: 1)", status:"new"}, ,]

Добавлен еще один элемент обратно в массив, запятые теперь вызывают "неопределенные" объекты

[{id:"1", name:"Test (ID: 1)", status:"new"}, , {id:"2", name:"Test 2 (ID: 2)", status:"new"}]

Вот моя функция удаления

    function removeFromList(Id) {
    var txtIDs = $("#<%= selected.ClientID %>");
    var data = eval(txtIDs.val());

    for (var i = 0; i < data.length; i++) {
        alert(typeof (data[i]));
        if (typeof(data[i]) != 'undefined') {
            if (data[i].id == Id)
                delete data[i]; // alert(data[i].name); //  
        }
    }     
}

Спасибо за просмотр этого для меня:)

Rob

1 Ответ

1 голос
/ 26 мая 2010

Удалить - это оператор, используемый для удаления ключей из объектов - вы не должны использовать его для удаления элементов из массива, потому что он не будет выполнять то, что вы ожидаете. Вы можете использовать методы Array, например, splice или slice для управления массивом.

Будет полезна документация по методам массива MDC 1004 *:)

В качестве альтернативы, вы можете использовать такую ​​функцию:

function removeArrayEl(arr, index){
    newArr = [];
    for(var i = 0, l = arr.length;i < l; i++){
        if(i != index){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

[править] Как отметили комментаторы, метод сращивания массива - как раз тот инструмент, который подходит для этой работы, но я оставлю эту функцию для справки. [/ Править]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...