过滤一个数组以创建另一个数组的最佳方法是什么?
2012-01-29
171
我想根据字符串过滤数组中的项目,并将它们保存到新数组中,然后对第二个数组执行其他一些函数。我该如何最好地实现这一点?
这是我目前所拥有的。
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...
}
}
}
感谢您的帮助。
2个回答
ECMAScript 5 支持数组上的
filter
方法。
例如:
> [1,2,3,4].filter(function(v) { return v % 2 == 0})
[ 2, 4 ]
您可以参考 MDN 的文档 查看用法。
但请注意,有些浏览器不支持此功能,出于兼容性问题,您可以考虑使用 es5-shim 或 underscore 。
在您处理字符串数组的情况下。您可以将
filter
与
map
一起使用。>
例如,过滤所有以“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]
qiao
2012-01-29
类似这样:
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);
Mark Robbins
2012-01-29