如何在JavaScript中将项目附加到嵌套数组
我有一个外部JS数组“main_category”,其中应该包含几个名为“temp”的数组 数组temp包含几个取自li标记的字符串元素 为了填充这两个数组,我在html页面中对每个ul标记的每个li标记运行for循环,如下所示:如何在JavaScript中将项目附加到嵌套数组,javascript,jquery,html,Javascript,Jquery,Html,我有一个外部JS数组“main_category”,其中应该包含几个名为“temp”的数组 数组temp包含几个取自li标记的字符串元素 为了填充这两个数组,我在html页面中对每个ul标记的每个li标记运行for循环,如下所示: function a{ var category_list = []; var temp; //how to split this list iteration into two for-loops $(".ul_list li").each
function a{
var category_list = [];
var temp;
//how to split this list iteration into two for-loops
$(".ul_list li").each(function(){
temp = [];
//adding only those list elements of a ul, that are red in color
if($(this).attr("style") == "color:red"){
var cat = $(this).text();
cat = cat.replace(/\s\s+/g, ' '); //removes whitespaces
temp.push(cat); //creates a single array for a single element
}
}
category_list.push(temp);
});
}
所需输出:
category_list = [['l1', 'l2', 'l3'], ['l1', 'l2', 'l3'], ['l1', 'l2', 'l3']..]
category_list = [['li'], ['l2'], ['l3']...]
电流输出:
category_list = [['l1', 'l2', 'l3'], ['l1', 'l2', 'l3'], ['l1', 'l2', 'l3']..]
category_list = [['li'], ['l2'], ['l3']...]
但是,临时推送(cat)LOC为每个li元素创建一个临时数组,而不是为一个ul内的所有li元素创建一个temp=[]数组。以下内容将把每个ul映射到一个数组,并将每个ul中的所有lis映射到一个数组,因此它将是一个二维数组,其中每个
类别列表[#]
是ul,子数组是您修改的每个li的文本
函数a(){
var category_list=$('.ul_list').get().map(函数(ul){
返回$('li',ul).get().map(函数(li){
返回$(li).text().replace(//\s\s+/g',);//删除空白
});
});
控制台日志(类别列表);
}
a()代码>
- 一件事
- 2件事
- 三件事
- 4件事
- 五件事
- 6件事
可能有点过于简化,但我得到了所需的输出。
第一步。声明空数组
第二步。运行循环,获取ul
元素中的所有子元素
第三步。将每个子集合转换为一个数组
第四步。将子集合推送到新数组中
var temp = []
var cat;
$('ul').each(function(){
cat = []
var liTags = Array($(this).children().text().trim());
temp.push(liTags);
})
您可以通过迭代每个.ul_list
元素来实现这一点,然后他们的子元素按该顺序应该会给出预期的结果
函数a(){
让列表=[]
$(“.ul_列表”)。每个(函数(){
设温度=[]
$(this).children().each(function()){
让text=$(this.text())
text.replace(/\s\s+/g',)
临时推送(文本)
})
列表推送(临时)
})
返回列表
}
log(a())
(代表问题作者发布解决方案)
该解决方案由James_F提供:
function a{
let category_list = [];
$(".ul_list").each(function(){
let temp = [];
$(this).children().each(function(){
//adding only those list elements of a ul, that are red in color
if($(this).children().attr("style") == "color:red"){
var cat = $(this).text();
cat = cat.replace(/\s\s+/g, ' '); //removes whitespaces
temp.push(cat); //creates a single array for a single element
}
})
category_list.push(temp);
})
}
是否有多个.ul\u列表
?另外,如果将temp
推送到未定义temp
的范围内的类别数组,则函数a()的function定义似乎无效。表达式category\u list.push(temp)
需要上移一行。@Taplar是的,html模板中有12-15.ul\u列表。否单击按钮成功调用函数。ul\u list li
将选择一个元素的平面列表。元素不会按其父元素进行神奇的分组。您能否提供输入和所需输出的示例,以及您实际获得的输出?此代码仅创建一个包含所有li元素的数组。它不是为属于一个特定Ulth的li元素创建子数组,外部映射在ul上。内部地图在ul的li上。你是说这不管用@SimranYes它创建了一个由45个元素组成的单个数组(45个),即总共5个列表项*9个列表项,出于某种原因,它正在将其展平。修改了它,并包含了一个可运行的代码段来显示它的工作原理。