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
循环相比,它的效率非常低。