jQuery并根据数据属性映射到新对象

jQuery并根据数据属性映射到新对象,jquery,arrays,each,Jquery,Arrays,Each,我试图根据数据属性从多个元素中提取所有ID 这是我的html: <div class="row"> <div class="item" data-element='{"id":1, "name":"John"}'>John</div> <div class="item"></div> </div> <div class="row"> <div class="item"data-element='

我试图根据数据属性从多个元素中提取所有ID

这是我的html:

<div class="row">
  <div class="item" data-element='{"id":1, "name":"John"}'>John</div>
  <div class="item"></div>
</div>
<div class="row">
  <div class="item"data-element='{"id":2, "name":"Peter"}'>Peter</div>
  <div class="item"></div>
</div>
问题是我只得到最后一个元素。控制台日志显示2彼得

我希望最终结果是所有id以及以数组形式提取的名称,如:

id = [1,2]
name = ['John', 'Peter']

您应该在
功能中使用
映射

var结果=[];
var id=[];
变量名称=[];
$(“[data element]”)。每个(函数(){
结果=$(this).data('element');
id[id.length]=result.id;
name[name.length]=result.name;
$.map(结果,函数(val,i){
console.log(val)
});
});
控制台日志(id)
console.log(名称)

约翰
彼得

从空数组开始,在一个循环中将每个值推入相应的数组中。你似乎把事情复杂化了

var arrObj={id:[],name:[]};
$(“[data element]”)。每个(函数(){
var data=$(this.data('element');
arrObj.id.push(data.id);
arrObj.name.push(data.name);
});
console.log(JSON.stringify(arrObj,null,'))

约翰
彼得

在forEach循环的每次迭代中,都将空数组的值设置为
$(this).data('element')
。因此,在对其求值时,最后一次迭代将始终是
result
的值。使用数组方法将项目添加到数组中,而不是对其进行设置;所以不是
result=$(this.data('element')应该是
result.push($(this.data('element'))

非常感谢您。
id = [1,2]
name = ['John', 'Peter']