jQuery.each用于列表和非列表

时间:2010-06-13 02:42:48

标签: javascript jquery

我有一个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);

好奇!

感谢阅读。

布赖恩

2 个答案:

答案 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,它只会将数组展平为两层深。