如何过滤数组?

时间:2014-05-23 06:17:31

标签: javascript algorithm

伙计们,请不要回答我使用JavaScript库来解决这个问题,我使用的是VanillaJS。

假设我有一个包含10,000个字符串记录的数组,如下所示:

var arr = [
  'John',
  'Foo',
  'Boo',
  ...
  'Some',
  'Beer'
];

请注意,数组不会有任何排序。

现在,我想在文本中找到oo的项目,最好的方法是什么?我应该填充新数组还是只填充不符合条件的pop项?

4 个答案:

答案 0 :(得分:3)

您可以使用filter方法,该方法将创建一个包含所有传递条件的元素的新数组。

arr.filter(function(x){ return x.indexOf ('oo') > -1});

如果您想在每个浏览器中使用过滤方法,可以在代码中添加polyfill方法(请参阅链接)。


使用基本javascript的另一个选项(稍微快一些)将是:

使用简单的for循环对数组进行循环,并根据您的条件进行测试。

var filtered = [];
for(var i=0, length=arr.length; i<length; i++){
   var current = arr[i]; 
   if(current.indexOf('oo') > -1){ 
      filtered.push(current);
   }
}

答案 1 :(得分:2)

我的approch

forEach function

function forEach(array, action) {
    for(var i=0; i<array.length; i++)
    action(array[i]);
}

部分功能

function asArray(quasiArray, start) {
    var result = [];
    for(var i = (start || 0); i < quasiArray.length; i++)
        result.push(quasiArray[i]);
    return result;
}

function partial(func) {
    var fixedArgs = asArray(arguments, 1);
    return function() {
        return func.apply(null, fixedArgs.concat(asArray(arguments)));
    };
}

包含String obj

的方法
if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

过滤功能:

function filter(test, array) {
    var result = [];
    forEach(array, function(element) {
        if (test(element))
            result.push(element);
    });
    return result;
}

测试数组项的测试功能

function test(key, el) {
    return el.contains(key);
}

最后

filter(partial(test, 'oo'), arr);

答案 2 :(得分:1)

没有捷径(p.s.你说我想找到物品,而不是过滤器 - 因此我的答案)

简单循环:

var g=arr.length; //important since you have big array
for( var i=0;i<g;i++)
{
 if ( g[i].indexOf('oo')>-1)  
  {
     console.log(g[i]);
  }
}

如果要过滤(不使用polyfill)

  var g=arr.length; //important since you have big array
  var h=[];
    for( var i=0;i<g;i++)
    {
     if ( g[i].indexOf('oo')>-1)  
      {
         h.push(g[i]);
      }
    }

    //do something with h

答案 3 :(得分:0)

一种非常简单的方法,使用forEach

var result = [];
arr.forEach(function (value) {
    if (value.indexOf('oo') !== -1) {
        result.push(value);
    }
});

map

var result = [];
arr.map(function (value) {
    if (value.indexOf('oo') !== -1) {
        result.push(value);
    }
});