如何通过$ each函数中的选择器变量创建具有键/值对的对象数组?

时间:2018-12-19 18:08:56

标签: javascript jquery

我正在尝试使用多个选择器的值在jquery中创建一个新对象。例如:

loopSelector = $('.myClass');

loopSelector.each(function(i, elem) {

  var1 = $(elem).parents('li').text();
  var2 = $(elem).parents('p').text();

  var newArray = [{
    animal: var1
    age: var2
  }];
  console.log(newArray);
}

在控制台中,我得到:

  • 数组(1)
  • 0:{动物:“猫”,年龄:12}
  • 数组(1)
  • 0:{动物:“狗”,年龄:5}
  • 数组(1)
  • 0:{动物:“山羊”,年龄:7}

但是当我尝试console.log(newArray.age);时,我得到undefined 3次。我的目标是按年龄值比较所有对象。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

由于您要创建一个所选元素相同的数组,但每个元素的数据表示形式不同,因此请考虑使用.map()而不是 Serviceprovidername _______________________ X Y Z

.each()

请注意最后使用.get()(正如Taplar在评论中指出的那样),它将jQuery对象转换为常规Javascript数组。

或者添加了一些精美的ES6功能来整理一些东西:

loopSelector = $('.myClass');

var array = loopSelector.map(function (i, elem) {
  var animal = $(elem).parents('li').text();
  var age = $(elem).parents('p').text();

  return {
    animal: animal,
    age: age
  };
}).get();

console.log(array);

答案 1 :(得分:0)

您可以尝试下面的代码片段直接访问对象:

loopSelector = $('.myClass');

var newArray = [];

loopSelector.each(function(i, elem) {

  var obj = {};
  var1 = $(elem).parents('li').text();
  var2 = $(elem).parents('p').text(); 

  obj.animal = var1;
  obj.age = var2;

  newArray.push(obj);
}

newArray.map(val => {
  //Here your will be able to access directly to objects with key name.
  console.log(val)
});