无法对某些元素的值调用.join()

时间:2017-09-05 10:02:01

标签: jquery arrays join

我有一个我设置的变量selectedTagNames

var selectedTagNames = $(".js-tag-name:checked").map(function(){return $(this).val()});

selectedTagNames
=> ["song:age_suitability=11-13", "song:age_suitability=5-7"]

出现成为一个数组。我想将值加入到带有“||”的单个字符串中,但我不能:

var searchTerm = selectedTagNames.join('||')
=> VM7234:2 Uncaught TypeError: undefined is not a function
message:  "undefined is not a function"
stack: (...)get stack: function () { [native code] }
set stack: function () { [native code] }__proto__: Error

我可以手动完成,而不是使用变量:

["song:age_suitability=11-13", "song:age_suitability=5-7"].join('||')
=> "song:age_suitability=11-13||song:age_suitability=5-7"

因此,该变量的值必须与我在第二个示例中使用的数组不同,即使它看起来是相同的。他们都只返回typeof()的“对象”。

我正在使用jquery版本1.7.1。

任何人都可以告诉我 a)这里发生了什么? b)如何将所选复选框的值收集到一个数组中,这样我就可以看到它们有多少,并将它们连接在一起,避免出现问题?

2 个答案:

答案 0 :(得分:1)

$(selector).map()返回一个类似于数组的对象,类似于jQuery从选择器返回的内容。

您需要使用静态方法:

$.map($('.js-tag-name:checked'), function(el) {
    return $(el).val();
});

答案 1 :(得分:1)

.map()返回一个jQuery集合,而不是一个数组。您可以通过在结果上调用.get()将其转换为数组。

var selectedTagNames = $(".js-tag-name:checked").map(function(){
    return $(this).val()
}).get();