使用ES5 .map与jQuery元素



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

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

I tried but failed:

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

编辑以包含class:它是typo。

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

正如prasanth所说,您可以在最后使用get从jQuery对象中获得一个真正的数组,尽管您需要记住jQuery的map和array的map之间的区别(使用jQuery的,回调的第一个参数是索引,而不是元素)。

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

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

ES2015增加了Array.from,可以做映射;参见Bergi的回答(最后一个代码片段)。


旁注:如果opt2input,selectoption元素,则不需要使用jQuery来获取其值:

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

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

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

您可以在最后

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

要使用Arraymap方法,首先使用.toArray将jQuery集合转换为数组:

const newList = $(".something").toArray().map(x => x.value);
或者,您可以使用ES6Array.from:
const newList = Array.from($(".something")).map(x => x.value);

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

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

最新更新