【问题标题】:Pushing a composite array element推送复合数组元素
【发布时间】:2011-08-12 22:06:37
【问题描述】:

考虑以下“推送”场景。

(global) var refs = [] ;

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

尽管如此,当我使用 Chrome 进行调试时,推送功能被跳过并且 refs 数组最后为空。是什么原因?

编辑:

完整的代码是这样的:

    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);

【问题讨论】:

  • 没有跳过:jsfiddle.net/sJYGr
  • 你能发布更多代码吗?也许稍后会发生什么?

标签: javascript arrays push


【解决方案1】:

看起来refs 正在异步调用中设置,并且您在设置之前对其进行记录。

【讨论】:

    【解决方案2】:

    考虑在性能关键的循环和函数中对函数调用使用替代原语操作。

    您可以使用以下方法。

    record[record.length] = id;
    

    这只是一个虚拟示例,您可以通过记录数组运行for 循环。

    原始操作可以比函数调用更快。

    【讨论】:

    • 速度对这个特殊问题有影响吗?推动似乎没有推动。不确定我看到这个答案与所述问题有什么关系。 ???
    • 这只是推送的另一种方式。
    • 这听起来像是过早的优化,IMO。另一方面,较旧的浏览器可能不会实现 push 方法,因此需要注意...
    【解决方案3】:

    语法错误:

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

    【讨论】:

    • 对不起,我拼错了。 id:1 是我实际做的。
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2013-01-21
    • 2011-07-19
    • 2012-07-10
    • 1970-01-01
    • 2022-10-09
    • 2014-07-29
    相关资源
    最近更新 更多