伙计们,请不要回答我使用JavaScript库来解决这个问题,我正在使用VanillaJS。
假设我有一个包含10,000个字符串记录的数组,如下所示:
var arr = [
'John',
'Foo',
'Boo',
...
'Some',
'Beer'
];
请注意,数组不跟随任何类型。
现在,我想在文本中找到带有oo
的项目,最好的方法是什么?我是应该填充一个新数组,还是只填充与标准不匹配的pop
项?
发布于 2014-05-23 06:21:05
您可以使用过滤器方法,它将创建一个包含传递条件的所有元素的新数组。
arr.filter(function(x){ return x.indexOf ('oo') > -1});
如果希望在每个浏览器中使用filter方法,则可以在代码中添加多边形填充方法(请参阅链接)。
使用基本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);
}
}
发布于 2014-05-23 07:08:46
我的方法
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)));
};
}
包含用于字符串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);
发布于 2014-05-23 06:20:21
没有捷径( 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]);
}
}
如果您想要过滤(没有多填充)
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
https://stackoverflow.com/questions/23822211
复制相似问题