2011-06-16 63 views
1

我该如何做这个工作?我在数组“第三个元素”中有一个空格“John”。jquery在数组中找到一个空格的字符串

看看: http://jsfiddle.net/hyHFT/

<style> 
    div { color:blue; } 
    span { color:red; } 
</style> 


<div>"John" found at <span></span></div> 
<div>4 found at <span></span></div> 
<div>"Karl" not found, so <span></span></div> 
<script>var arr = [ 4, " Pete", 8, " John" ]; 

$("span:eq(0)").text(jQuery.inArray("John", arr)); 
$("span:eq(1)").text(jQuery.inArray(4, arr)); 
$("span:eq(2)").text(jQuery.inArray("Karl", arr)); 

</script> 

感谢 格拉西亚斯! 埃尔龙舌兰

+0

是消除空间? – 2011-06-16 23:14:00

回答

3

尝试这样做:

var arr = [ 4, " Pete", 8, " John" ]; 
arr = $(arr).map(String.prototype.trim); 
... 

map功能适用trim到阵列中的每个元素,并存储其结果(不带空格的字符串)到一个新的数组,在相同的位置。

让你的数组被消毒,你会发现这些元素。

只是一个旁注,它会将数字转换为字符串。照顾这一点。

祝你好运!

编辑:

如果你想保持原来的类型,使用此:

$(arr).map(function(key, val) { return (typeof(val) == "string") ? val.trim() : val; }) 

不言自明的,是不是?

+0

'String.prototype。trim'在旧版浏览器中不可用。 – 2011-06-16 23:19:53

+0

对不起。不知道:S多大?无论如何,第二种选择应该避免这种情况。谢谢你的评论。 – 2011-06-16 23:22:36

+0

它绝对不适用于IE8及更高版本。这是一个很好的表格:http://kangax.github.com/es5-compat-table/ – 2011-06-16 23:23:28

2

看来你使用的是jQuery。

您可以制作Array的标准化副本,并将其修剪成员。

arr = $.map(arr, $.trim); 

(感谢MeouwFelix

+1

不需要在函数中包装'$ .trim',只需将它作为参考传递: 'arr = $ .map(arr,$ .trim);' – meouw 2011-06-16 23:20:13

+0

您可能只需编写:'arr = $ .map (arr,$ .trim);' – 2011-06-16 23:20:34

+0

@Felix @meouw我的头似乎没有这么早就工作:P – alex 2011-06-16 23:21:38

0

你的阵列有 “约翰”,但你检查 “约翰”。这些显然是不同的字符串。这适用于我:

<style> 
    div { color:blue; } 
    span { color:red; } 
</style> 

<div>"John" found at <span></span></div> 
<div>4 found at <span></span></div> 
<div>"Karl" not found, so <span></span></div> 
<script>var arr = [ 4, " Pete", 8, " John" ]; 

$("span:eq(0)").text(jQuery.inArray(" John", arr)); 
$("span:eq(1)").text(jQuery.inArray(4, arr)); 
$("span:eq(2)").text(jQuery.inArray("Karl", arr)); 

</script> 

或者你想做某种模糊匹配,忽略空格吗?

0

如果您想忽略空格,请使用修剪后的副本。确保仅修剪字符串,否则你的4查找会失败:

var arr = [ 4, " Pete", 8, " John" ]; 
var trimmedArr = jQuery.map(arr, function(item) 
{ 
    return typeof item == "string" ? jQuery.trim(item) : item; 
}); 

$("span:eq(0)").text(jQuery.inArray("John", trimmedArr)); 
$("span:eq(1)").text(jQuery.inArray(4, trimmedArr)); 
$("span:eq(2)").text(jQuery.inArray("Karl", trimmedArr)); 

This method works (jsFiddle)

1

您可以尝试使用grep函数。

jQuery.grep(arr, function(n, i){ 
    if (jQuery.trim(n) == 'John') $("span:eq(0)").text(i); 
    return false; 
}); 
0

尽量不使用jQuery,通过阵列手动代替迭代,并使用正规式。与inArray("John", arr)更换jQuery.inArray("John", arr),并把下面的函数在你的脚本:你把字符串到数组出了问题之前

function inArray(string, arr){ 
    var re = RegExp(string, "g"); 
    for(var i in arr){ 
     if(arr[i].search(re) != -1){ 
      return i; 
     } 
    } 
} 
相关问题