数组没有响应forEach

时间:2016-08-08 23:10:33

标签: javascript

以下是我的Chrome开发者控制台中的一些测试:

> tags
returns ["test_tag", "test_tag2"]

> tags.forEach
returns undefined

> ["test_tag", "test_tag2"].forEach
returns forEach() { [native code] }

我不知道为什么我的tags对象没有响应forEach

检查类型并不是很有启发性,这是可以预期的:

> typeof(tags)
// returns 'object'
> typeof(["test_tag", "test_tag2"])
// returns 'object'

我如何构建这个tags对象?

var $nodes = $(".metadata")
var tags = $nodes.map(function(idx, node){
  nodeJson = $(node).text()
  return JSON.parse(nodeJson)['tags']
})

2 个答案:

答案 0 :(得分:2)

jQuery的map()函数返回元素集合,或者在这种情况下返回的文本包装在jQuery对象中,这当然是一个对象,而不是一个数组。

如果您想要数组中的文字,那么您也可以使用get()

var $nodes = $(".metadata")
var tags = $nodes.map(function(idx, node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
}).get();

或更合适的$.map

var $nodes = $(".metadata")
var tags = $.map( $nodes, function(node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
});

答案 1 :(得分:1)

试试这样:

Array.prototype.forEach.call(tags, function(el){
    console.log(el);
});