Javascript 如何过滤数组?

Javascript 如何过滤数组?,javascript,algorithm,Javascript,Algorithm,伙计们,请不要回答我使用JavaScript库来解决这个问题,我使用的是VanillaJS 假设我有一个包含10000条字符串记录的数组,如下所示: var arr = [ 'John', 'Foo', 'Boo', ... 'Some', 'Beer' ]; 请注意,数组不遵循任何排序 现在,我想在文本中查找带有oo的项目,最好的方法是什么?我应该填充一个新数组还是只填充与条件不匹配的pop项目?没有快捷方式(请注意,您说我要查找项目,而不是筛选-因此我的答案) 简单

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

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

var arr = [
  'John',
  'Foo',
  'Boo',
  ...
  'Some',
  'Beer'
];
请注意,数组不遵循任何排序

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

没有快捷方式(请注意,您说我要查找项目,而不是筛选-因此我的答案)

简单循环:

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]);
  }
}
var g=arr.length//重要的是,因为你有大数组
对于(变量i=0;i-1)
{
console.log(g[i]);
}
}
如果要过滤(不带多边形填充)

var g=arr.length//重要的是,因为你有大数组
var h=[];
对于(变量i=0;i-1)
{
h、 推(g[i]);
}
}
//用h做点什么
您可以使用该方法,该方法将创建一个包含所有通过条件的元素的新数组

arr.filter(function(x){ return x.indexOf ('oo') > -1});
var filtered = [];
for(var i=0, length=arr.length; i<length; i++){
   var current = arr[i]; 
   if(current.indexOf('oo') > -1){ 
      filtered.push(current);
   }
}
如果要在每个浏览器中使用filter方法,可以在代码中添加polyfill方法(请参见链接)


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

使用简单的for循环在阵列中循环,并根据您的条件进行测试

arr.filter(function(x){ return x.indexOf ('oo') > -1});
var filtered = [];
for(var i=0, length=arr.length; i<length; i++){
   var current = arr[i]; 
   if(current.indexOf('oo') > -1){ 
      filtered.push(current);
   }
}
var-filtered=[];
对于(vari=0,length=arr.length;i-1){
过滤。推送(电流);
}
}
我的方法

forEach函数

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)));
    };
}
过滤功能:

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);

一个非常简单的方法是使用
forEach

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

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

选择algo有几个条件,比如:短长度/长数组。。etc@pramod.nikam.dev你能扩展你的答案吗?你确定它是
>0
?所以你是说我应该创建一个临时数组并将项目推入其中,对吗?@AfshinMehrabani补充说,infotitle指定了
过滤器
。他使用的
find
可能是错误的,因为他后来问他是否创建了新的数组,等等。这就是为什么我添加了另一个解决方案你确定这是过滤包含大量项的数组的最佳方法吗?我的意思是,对不匹配的项目进行
pop
ing不是更好吗?Parcham balas:-)谢谢。