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');
我就会得到一大堆! ^^
答案 0 :(得分:9)
'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++;
});
注意:您的代码在每个()之后错过;
。虽然它是有效的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();
这是一个jsfiddle来说明
这个article涵盖了使用.each()和.map()从jquery中的列表构建数据集合。
答案 1 :(得分:1)
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'};
答案 2 :(得分:1)
<强>解:强> 我有类似的情况,并能够提出一个干净的解决方案。我基本上有一个问题对象,其中包含几个带有各个属性的问题。
这是我的解决方案:
$("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
};
这个必要条件为它找到的每个“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
)
)
)
答案 3 :(得分:0)
你忘记了
a[x] = {};
使索引x
(引用)的元素成为可以添加属性p
的对象
a[x][p] = …;
您不应该使用each(…)
,与for
循环相比效率非常低。
答案 4 :(得分:0)
a[x] = {name: 'f', link: 'UUUUUUUUUUU'};