Толкая элемент составного массива - PullRequest
0 голосов
/ 13 августа 2011

Рассмотрим следующий сценарий «толкания».

(global) var refs = [] ;

var record = {id:1, references: ["12","145"]};
refs.push(record);

Тем не менее, когда я отлаживаю в Chrome, функция push пропускается и массив refs в конце становится пустым. В чем причина?

EDIT:

Полный код выглядит примерно так:

    gadgets.sciverse.makeRequest(entry['prism:url'], function(obj) {
        var testJson = $.xml2json(obj['text']);
        //  console.log(testJson);

        var tempArr = [];

        if (!testJson) {
            console.log('empty secondary response');
            return ;
        }

        var refSet = testJson ['item']['bibrecord']['tail']['bibliography']['reference'];

        if (!refSet)
            tempArr = [] ;
        else {
            $.each(refSet, function(i, e){
                tempArr.push(e['ref_info']['refd_itemidlist']['itemid']['text']);
            })
        }

        var verySillyTemp = {
            id: pid,
            arr: tempArr
        } ;

        refs.push( verySillyTemp );
    },params);

    console.log(refs);

Ответы [ 3 ]

2 голосов
/ 13 августа 2011

Похоже, refs устанавливается в асинхронном вызове, и вы регистрируете его до того, как он установлен.

1 голос
/ 13 августа 2011

Рассмотрите возможность использования альтернативной примитивной операции над вызовами функций в циклах и функциях, критичных к производительности.

Вы можете использовать следующий метод.

record[record.length] = id;

Это просто фиктивный пример, вы можете запустить цикл for через массив записей.

Примитивные операции могут выполняться быстрее, чем вызовы функций.

0 голосов
/ 13 августа 2011

Синтаксическая ошибка:

var record = {id:1, references: ["12","145"]};
...