2011-06-16 61 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; 
     } 
    } 
} 
相關問題