2012-01-29 126 views
0

我想過濾基於字符串的數組中的項目,並將它們保存到一個新的數組,然後在第二個數組上執行一些其他功能。我如何最好地實現這一目標?過濾數組以創建另一個數組的最佳方式是什麼?

這是我到目前爲止。

for (var i = 0; i < array.length; i++) { 
    var num = i; 
    var item = array.entries[i]; 
    var str = item.content;  
    var newArray = new Array(); 

    if (str.indexOf("filter") !== -1) { 
       // If the content of the item contains a given string then ad it to the array. 
       newArray.push(item); 

     if (num === array.length) { 
      // When we reach the end of the first array, perform something on the new array. 
      doSomeFunction(); 
     } 
    } 

    function doSomeFunction() { 
     // Now do something with the new array 
     for (var j = 0; j < newArray.length; j++) { 
      // Blah, blah, blah... 
     } 
    } 
} 

感謝您的任何幫助。

+0

NUM將永遠無法達到array.length,所以如果你是在最後這不是檢查的好方法的數組 - 也不要在你的循環中聲明一個函數 – kinakuta 2012-01-29 03:19:48

回答

2

ECMAScript 5支持陣列上的filter方法。

例如:

> [1,2,3,4].filter(function(v) { return v % 2 == 0}) 
[ 2, 4 ] 

您可以參考MDN's document看用法。

但請注意,某些瀏覽器不支持此功能,對於兼容性問題,可以考慮使用es5-shimunderscore

在你的情況下做字符串數組的工作。例如,您可以使用filtermap

例如,要篩選以'index'開頭的所有字符串,然後從中取出尾部數字。

var ss = [ 
    "index1", 
    "index2", 
    "index3", 
    "foo4", 
    "bar5", 
    "index6" 
]; 

var nums = ss.filter(function(s) { 
    return /^index/.test(s); 
}).map(function(s) { 
    return parseInt(s.match(/(\d+)$/)[1], 10); 
}); 

console.log(nums); 

上面的腳本給你[1,2,3,6]

0

事情是這樣的:

function arrayFromArray(a,f){ 
    var b=[]; 
    for (var x=0;x<a.length;x++) { 
    if (f(a[x])) { 
     b.push(a[x]); 
    } 
    } 
    return b; 
} 


function predicateIsEven(i){ 
    return i%2==0; 
} 


var arr=[1,2,3,4,5,6]; 

var evens=arrayFromArray(arr,predicateIsEven); 
相關問題