我有一个jQuery.each(data, foo)
,其中数据是字符串或字符串列表。我想知道是否存在将字符串转换为列表的现有实用程序函数,或者仅对字符串执行foo
。而不是简单的路线:
if (!$.isArray(data)) {
foo(0, data); // can't rely on `this` variable
} else {
$.each(data,foo);
}
我只是想知道是否已经有jQuery或Javascript的内置函数可以自动将数据转换为列表,如下所示:
function convert_to_list(data) { return $.isArray(data) ? data : [data]; }
$.each(convert_to_list(data), foo);
好奇!
感谢阅读。
布赖恩
答案 0 :(得分:2)
您可以使用.apply()
或.call()
将字符串“绑定”到foo
,而不是转换为数组:
if (!$.isArray(data)) {
foo.call(data, 0); // `this` will point to data
} else {
$.each(data,foo);
}
答案 1 :(得分:1)
安迪的做法很好。或者,您始终可以强制数据为数组,然后提供给jQuery.each
if(typeof data == 'string') {
data = [data];
}
jQuery.each(data, foo);
另一种选择是始终将输入包装在数组中,无论其类型(字符串或数组)如何,然后将其展平。顾名思义,flatten
会将多级数组展平为一个级别。因此[["foo", "bar"]]
变为["foo", "bar"]
。代码变成了:
jQuery.each([data].flatten(), foo);
各种库提供了flatten方法,并且可以在MDC上找到纯{JavaScript}实现here和另一个example,它只会将数组展平为两层深。