jQuery每个数组


analyse : function (that) {
        var a = new Array();
        var x = 0;
        $(that).children("li").each(function(){
            console.log('test1');
            a[x]['name'] = 'f'; 
            a[x]['link'] = 'UUUUUUUUUUU';
            console.log('test2');
            x++;
        })
        return a;
    }

我正在尝试创建一个数组来存储PHP菜单中的层次结构。

控制台不会显示"test2",我做错了什么?


在Didier G的帮助下变成了这个

analyse : function (that) {
        return $(that).children('li').map(function() {
            var b = {
                name: $(this).children('a').text(), 
                link: $(this).children('a').attr('href')
            };
            if ($(this).children('ul').size() > 0) {
               b.childs =  mcms.module.analyse($(this).children('ul'));
            } 
            return b;
        });
    }

所以如果我说var y = analyse('#menu');,我得到了一堆!^ ^

此时'a[x]'未定义。你必须首先构建一个对象并将其分配给'i'的位置('x'确实不是迭代器的标准名称,感谢@Cito):

var a = new Array();
var i = 0;
$(that).children("li").each(function(){
        console.log('test1');
        a[i] = { name: 'f', link: 'UUUU' };
        console.log('test2');
        i++;
});

注意:你的代码在each()之后漏掉了一个;。尽管在javascript中省略分号是有效的,但我认为最好显式地使用它们以避免误解。


创建数组可以使用。map()

var a = [];
// .map() returns a jquery array, to obtain a pure javascript array, you must call .toArray() afterwards
a = $(that).children('li').map(function() {
    return { name: 'f', link: 'UUUU' };
}).toArray();

这里有一个示例来说明

本文介绍了在jquery中使用。each()和。map()从列表中构建数据集合。

a为空,您正在尝试将属性设置为未定义的对象。请使用以下代码:

    var a = [];
    $(that).children("li").each(function(x){
        console.log('test1');
        a[x] = {};
        a[x].name = 'f'; 
        a[x].link = 'UUUUUUUUUUU';
        console.log('test2');
    })
    return a;

更短的代码是(在回调中):

a[x] = {name: 'f', link: 'UUUUUUUUUUU'};

解决方案:我也遇到过类似的情况,并且能够想出一个干净的解决方案。我基本上有一个to make question对象,里面有几个问题,每个问题都有各自的属性。

这是我的解决方案:

$("li").each(function(i,e){
// Build Array
questionOb[i] = {
    'questionSeq' : i, 
    'questionType' : $(this).find(".questionType").attr("rel"), 
    'questionLabel' : $(this).find(".questionLabel").attr("rel"), 
    'questionAnswers' : $(this).find(".questionAnswers").attr("rel"), 
    'questionMinimum' : $(this).find(".questionMinimum").attr("rel"), 
    'questionMaximum' : $(this).find(".questionMaximum").attr("rel"), 
    'questionInterval' : $(this).find(".questionInterval").attr("rel"), 
};
});
var dataString = {
    questionsSet : questionOb
};

这个essential为它找到的每个"li"生成一个问题数组。数据最终看起来像这样:

Array
(
    [questions] => Array
        (
            [0] => Array
                (
                    [questionSeq] => 0
                    [questionType] => email
                    [questionLabel] => Please enter your question here.
                    [questionRandom] => no
                    [questionRequired] => no
                )
            [1] => Array
                (
                    [questionSeq] => 1
                    [questionType] => numeric
                    [questionLabel] => Please enter your question here.
                    [questionRandom] => no
                    [questionRequired] => no
                )
            [2] => Array
                (
                    [questionSeq] => 2
                    [questionType] => singleselect
                    [questionLabel] => Please enter your question here.
                    [questionAnswers] => 
                    [questionRandom] => no
                    [questionRequired] => no
                )
        )
)
a[x] = {name: 'f', link: 'UUUUUUUUUUU'};

你忘了

a[x] = {};

使索引x处的元素(一个引用)成为一个对象,该对象可以有一个属性p来添加

a[x][p] = …;

您不应该使用each(…),与for循环相比,它的效率非常低。

相关内容

  • 没有找到相关文章

最新更新