伙计们,请不要回答我使用JavaScript库来解决这个问题,我使用的是VanillaJS。
假设我有一个包含10,000个字符串记录的数组,如下所示:
var arr = [
'John',
'Foo',
'Boo',
...
'Some',
'Beer'
];
请注意,数组不会有任何排序。
现在,我想在文本中找到oo
的项目,最好的方法是什么?我应该填充新数组还是只填充不符合条件的pop
项?
答案 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);
}
});