使用带有 jQuery 元素的 ES5 .map

Using ES5 .map with jQuery Elements

下面的代码如何使用 ES5 .map 函数,而不是 jQuery .map?

        const newList = new Array();
        $(".something").each((_, opt2) => {
            const val2 = $(opt2).val();
            ddl2Vals.push(val2);
        })

我尝试过但失败了:

const newList = $(".something").map(x => $(x).val());

编辑以包含 class:这是错字。

你可以在最后

中使用.get()
$("#something").map((_, x) => $(x).val()).get()

我将假设您的真实代码使用 returns 多个元素的选择器(#something 是一个 ID 选择器;ID 是应该在文档中是唯一的)。

作为, you can use get at the end to get a true array from the jQuery object, although you need to remember the difference between jQuery's map and Array's map(对于jQuery,回调的第一个参数是索引,而不是元素)。

如果你真的想使用 Arraymap,你可以使用 Function.prototype.call,像这样:

const newList = Array.prototype.map.call($("some-selector"), opt2 => $(opt2).val());

但是ES2015新增了Array.from,可以做映射;请参阅 (最后一个代码片段)。


旁注:如果 opt2inputselectoption 元素,则无需使用 jQuery 来获取其值:

const newList = Array.prototype.map.call($("some-selector"), opt2 => opt2.value);

或者,再次使用 Array.from,正如 Bergi 指出的那样:

const newList = Array.from($("some-selector"), opt2 => opt2.value);

要使用 Arraymap 方法,首先使用 .toArray:

将 jQuery 集合转换为数组
const newList = $(".something").toArray().map(x => x.value);

或者,您可以使用 ES6 Array.from:

const newList = Array.from($(".something")).map(x => x.value);

你甚至不需要使用.map()的地方,你可以只使用它的第二个参数一步完成映射和数组转换:

const newList = Array.from($(".something"), x => x.value);