如何在JavaScript中将项目附加到嵌套数组

如何在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

我有一个外部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(){
       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个列表项,出于某种原因,它正在将其展平。修改了它,并包含了一个可运行的代码段来显示它的工作原理。