首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何过滤数组?

如何过滤数组?
EN

Stack Overflow用户
提问于 2014-05-23 06:17:31
回答 4查看 122关注 0票数 0

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

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

代码语言:javascript
运行
复制
var arr = [
  'John',
  'Foo',
  'Boo',
  ...
  'Some',
  'Beer'
];

请注意,数组不跟随任何类型。

现在,我想在文本中找到带有oo的项目,最好的方法是什么?我是应该填充一个新数组,还是只填充与标准不匹配的pop项?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-23 06:21:05

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

代码语言:javascript
运行
复制
arr.filter(function(x){ return x.indexOf ('oo') > -1});

如果希望在每个浏览器中使用filter方法,则可以在代码中添加多边形填充方法(请参阅链接)。

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

在数组中循环一个简单的for循环,并根据您的情况进行测试。

代码语言:javascript
运行
复制
var filtered = [];
for(var i=0, length=arr.length; i<length; i++){
   var current = arr[i]; 
   if(current.indexOf('oo') > -1){ 
      filtered.push(current);
   }
}
票数 3
EN

Stack Overflow用户

发布于 2014-05-23 07:08:46

我的方法

forEach函数

代码语言:javascript
运行
复制
function forEach(array, action) {
    for(var i=0; i<array.length; i++)
    action(array[i]);
}

部分函数

代码语言:javascript
运行
复制
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)));
    };
}

包含用于字符串obj的方法

代码语言:javascript
运行
复制
if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

滤波函数:

代码语言:javascript
运行
复制
function filter(test, array) {
    var result = [];
    forEach(array, function(element) {
        if (test(element))
            result.push(element);
    });
    return result;
}

测试数组项的测试函数

代码语言:javascript
运行
复制
function test(key, el) {
    return el.contains(key);
}

最后

代码语言:javascript
运行
复制
filter(partial(test, 'oo'), arr);
票数 2
EN

Stack Overflow用户

发布于 2014-05-23 06:20:21

没有捷径( p.s. )你说我想找东西,而不是过滤--所以我回答)

简单循环:

代码语言:javascript
运行
复制
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]);
  }
}

如果您想要过滤(没有多填充)

代码语言:javascript
运行
复制
  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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23822211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档