2015-08-23 44 views
2

假設我們有JavaScript數組arr,其中每個arr[i]包含一個句子。現在,如果我們想搜索包含特定字符串str的句子,我們可以使用match找到使用如何使用match重新排列JavaScript數組?

var newarr = [];     
for(var i = 0; i < arr.length; i++) { 
if(arr[i].toLowerCase().match(str.toLowerCase()){  
newarr[newarr.length] = arr[i];    
} 
} 

新陣列newarr將只包含包含字符串str判決,將這些句子。現在,有沒有辦法重新排列newarr以使開頭的句子開頭爲str,那麼中間包含str的句子最後包含str

回答

2

數組中可用的方法sort可以採用自定義函數,根據該方法比較元素並進行排序。您的自定義排序功能需要兩個參數,ab,並返回一個數字; ab是正在比較的數組的元素。你的函數返回告訴sort功能是否ab應該是第一位的,按照以下規則數:

  • 如果返回的數字是<0,然後a到來之前b
  • 如果返回的號碼是>0,然後b到來之前a
  • 如果返回的數字是0,然後ab是「相同的」訂單明智

因此,要根據地方的子str出現下令字符串數組,那麼你可以做這樣的事情:

var arr = ['bbbab', 'bbabbb', 'abbb', 'bbbba']; 

// Our substring. 
var str = 'a'; 
// Make copy of array. 
var newarr = arr.slice() 
// Sort. 
newarr.sort(function (a, b) { 
    return a.indexOf(str) - b.indexOf(str); 
}); 
console.log(newarr); // => ["abbb", "bbabbb", "bbbab", "bbbba"] 
+0

什麼是a和b? – user3741635

+0

'a'和'b'是您正在進行比較的數組元素。 –

+0

有沒有辦法在排序時使用'trim()'修剪每個數組元素? – user3741635

-1

您已經於您,如果條件被遺忘的一個括號。

http://jsfiddle.net/pandeyaditya/LbwgfLvt/

檢查下面的代碼:

var arr = ["JS is fun", "JS Rocks", "JS is for techies"]; 
var newarr = []; 
var str = "fun"; 
for(var i = 0; i < arr.length; i++) { 
if(arr[i].toLowerCase().match(str.toLowerCase())){  
newarr[newarr.length] = arr[i];    
} 
} 
    alert(newarr); 
+0

將來,您可以編輯問題來解決這樣的小問題。 –