为什么我不能使用map来收集Javascript中对象数组的属性?

时间:2016-09-22 23:38:09

标签: javascript jquery

我有一个集合,我想从中获取textContent属性并放入列表中。 map()无法按预期工作:

table_headers = $("#careerStats table thead tr th");
headers.map(function(obj) {return(obj.textContent);});
[]

当我编写一个迭代版本时,我能够得到一个我预期的值数组:

values = [];
for (i=0; i<table_headers.length; i++) {    
    values.push(table_headers[i].textContent); 
}

values
["Year", "Team", "LG", "W", "L", "ERA", "G", "GS", "CG", "SHO", "SV", "SVO", "IP", "H", "R", "ER", "HR", "HB", "BB", "IBB", "SO", "AVG", "WHIP", "GO/AO", "Year", "Team", "LG", "W", "L", "ERA", "G", "GS", "CG", "SHO", "SV", "SVO", "IP", "H", "R", "ER", "HR", "HB", "BB", "IBB", "SO", "AVG", "WHIP", "GO/AO"]     

我必须误解Javascript原型和/或map()。

3 个答案:

答案 0 :(得分:7)

你没有使用JavaScript的map() - 这是jQuery的map(),它的行为方式不同:     jQuery的地图有以下签名:

$(selector).map(function (index, value) { ... })

您必须使用第二个参数来访问所选元素:

table_headers.map(function(idx, obj) {return(obj.textContent);});

jQuery的地图和JS的地图之间还有另一个区别。 jQuery返回一个新的包装器,而不是一个普通的数组。要获取基础数组,可以使用get

访问它
mapped_table_headers.get()

答案 1 :(得分:1)

试试这段代码:

Replace
[[self.subviews firstObject] insertSubview:self.overlay atIndex:0];

with
[[self.subviews firstObject] insertSubview:self.overlay atIndex:self.subviews.count -1];

答案 2 :(得分:1)

您假设jQuery选择器正在返回JavaScript数组。它实际上是返回一个jQuery对象。 jQuery Object具有许多与JavaScript数组类似的功能(以及许多额外的功能)。但是,当您在jQuery对象上调用.map()时,您调用的是jQuery&#39; .map(),其行为与JavaScript数组上的.map()不同。