Javascript 循环遍历列表并插入到对象数组中

Javascript 循环遍历列表并插入到对象数组中,javascript,jquery,arrays,Javascript,Jquery,Arrays,我有这样一份清单: <li class='category parent-category' data-categoryId='1' data-parentCategoryId='' data-parentOrder='1'> <a href='/category/edit/1'>Business Basics</a> </li> <li class='category parent-category' data-categoryI

我有这样一份清单:

<li class='category parent-category' data-categoryId='1' data-parentCategoryId='' data-parentOrder='1'>
    <a href='/category/edit/1'>Business Basics</a>
</li>

<li class='category parent-category' data-categoryId='10' data-parentCategoryId='1' data-parentOrder='2'>
    <a href='/category/edit/10'>General/Legal</a>
</li>

<li class='category parent-category' data-categoryId='15' data-parentCategoryId='2' data-parentOrder='3'>
    <a href='/category/edit/15'>Home, Help &amp; Links</a>
</li>
但目前它只从第一个元素获取数据,然后多次将其插入数组

[ 
    0 => [ categoryId => 1, parentCategoryId => , childOrder => , parentOrder => 1 ], 
    1 => [ categoryId => 1, parentCategoryId => , childOrder => , parentOrder => 1 ], 
    2 => [ categoryId => 1, parentCategoryId => , childOrder => , parentOrder => 1 ]
]
我想要的是:

[ 
    0 => [ categoryId => 1, parentCategoryId => , childOrder => , parentOrder => 1 ], 
    1 => [ categoryId => 10, parentCategoryId => 1, childOrder => , parentOrder => 2 ], 
    2 => [ categoryId => 15, parentCategoryId => 2, childOrder => , parentOrder => 3 ]
]
这可能有用

这可能有效

对象是

在循环中,只设置同一对象categoryData的属性,而不是创建新的属性

最后,数组在每个索引处都包含对同一对象的多个引用。这就是为什么在结果数组的每个元素上都会看到最后一个category元素的相同值

解决方案是为循环中的每个类别元素创建一个对象

$('.category').each(function() {
 const data = {
    categoryId: category.attr('data-categoryId'),
    parentCategoryId: category.attr('data-parentCategoryId'),
    childOrder: category.attr('data-child-order');
    parentOrder: category.attr('data-parent-order')
  };

  myArray.push(data);
});
对象是

在循环中,只设置同一对象categoryData的属性,而不是创建新的属性

最后,数组在每个索引处都包含对同一对象的多个引用。这就是为什么在结果数组的每个元素上都会看到最后一个category元素的相同值

解决方案是为循环中的每个类别元素创建一个对象

$('.category').each(function() {
 const data = {
    categoryId: category.attr('data-categoryId'),
    parentCategoryId: category.attr('data-parentCategoryId'),
    childOrder: category.attr('data-child-order');
    parentOrder: category.attr('data-parent-order')
  };

  myArray.push(data);
});

还需要将ref更改为category

var myArray=[]; $'.category'.eachfunction{ 让categoryData=Object.createnull; categoryData.categoryId=$this.attr'data-categoryId'; categoryData.parentCategoryId=$this.attr'data-parentCategoryId'; categoryData.childOrder=$this.attr'data-child-order'; categoryData.parentOrder=$this.attr'data-parent-order'; myArray.pushcategoryData; }; console.logmyArray;
还需要将ref更改为category

var myArray=[]; $'.category'.eachfunction{ 让categoryData=Object.createnull; categoryData.categoryId=$this.attr'data-categoryId'; categoryData.parentCategoryId=$this.attr'data-parentCategoryId'; categoryData.childOrder=$this.attr'data-child-order'; categoryData.parentOrder=$this.attr'data-parent-order'; myArray.pushcategoryData; }; console.logmyArray;
每次都需要推送一个新对象:

$('.category').each(function() {
    myArray.push({
        categoryId: category.attr('data-categoryId'),
        parentCategoryId: category.attr('data-parentCategoryId'),
        childOrder: category.attr('data-child-order'),
        parentOrder: category.attr('data-parent-order'),
    });
});

每次都需要推送一个新对象:

$('.category').each(function() {
    myArray.push({
        categoryId: category.attr('data-categoryId'),
        parentCategoryId: category.attr('data-parentCategoryId'),
        childOrder: category.attr('data-child-order'),
        parentOrder: category.attr('data-parent-order'),
    });
});

下面的代码将为您排序:

var myArray=[]; $'.category'.eachfunction{ 让categoryData=Object.createnull; categoryData.categoryId=$this.attr'data-categoryId'; categoryData.parentCategoryId=$this.attr'data-parentCategoryId'; categoryData.childOrder=$this.attr'data-child-order'; categoryData.parentOrder=$this.attr'data-parentOrder'; myArray.pushcategoryData; }; console.logmyArray;
下面的代码将为您排序:

var myArray=[]; $'.category'.eachfunction{ 让categoryData=Object.createnull; categoryData.categoryId=$this.attr'data-categoryId'; categoryData.parentCategoryId=$this.attr'data-parentCategoryId'; categoryData.childOrder=$this.attr'data-child-order'; categoryData.parentOrder=$this.attr'data-parentOrder'; myArray.pushcategoryData; }; console.logmyArray;
你需要在每个循环上Object.create。你需要在每个循环上Object.create。谢谢,$这是需要的。谢谢,$这是需要的。