2012-01-29 51 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); 
相关问题