2015-06-19 55 views
1

我想创建一个函数,它将扫描一个字符的所有数组并返回包含该字符的所有数组。例如,我如何检查数组中的第一个字符串是否以“_”结尾?函数扫描一个字符的数组列表,并返回所有包含它的数组

Example: searchNames([ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ]); 

//should output [ [ "john_", "[email protected]" ] ] 

这是我迄今所做的:http://jsfiddle.net/marcusdei/ve57p28h/

对于那些谁喜欢看我的代码在这里:

function searchNames(logins){ 
var str = "_"; 
for (var i = 0; i != logins.length; i++) { 
    var substring = logins[i]; 
    if (str.indexOf(substring) != - 1) { 
     return substring; 
     } 
    } 
     return null; 
} 
+0

//应该输出[ “john_”, “[email protected]”] - 你的意思是输出应该是这样的? –

+0

是的,你是对的!更正。 – mdarmanin

+0

你的代码应该在你的问题中,而不是在外部链接中。 – jfriend00

回答

0

应用的JavaScript过滤器将做的工作:

[ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ].filter(
    function(data){ 
    return data[0]?data[0].lastIndexOf('_')==data[0].length-1:false; 
}); 
+0

请注意,你的函数不会过滤出空字符串 –

+0

此外,'john_x_'将被过滤掉,而'_' –

+0

修改完代码。 – Vikash

1

这看起来像一个典型的用例阵列的filter

var input=[ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ]; 
var output=input.filter(function (x) { 
//if want to see whether a '_' is found in the string 
return x[0].indexOf('_')>-1; 
//Or, only at the last position 
//return x[0].length>0 ? x[0][x[0].length-1] == '_' : false; 

}); 
+0

我一开始并没有看到OP只希望最后一个字符是'_',我已经编辑了我的回答 –

+0

最后一个版本更符合我的要求.. – mdarmanin

+0

@rainbowloops我已经添加了两个选项,使用任何适合你的需求 –

0

有一个叫Array.prototype.filter的函数。这是一个干净,功能强大的方法。

function hasUnderscore (string) { 
    return string.substr(-1) == '_' ? true : false 
} 

function doWithNthGetter (nth, func) { 
    return function (array) { 
    return func(array[nth]) 
    } 
} 

var checkThis = [ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ] 

checkThis.filter(nthGetter(2, hasUnderscore)) 
0

优化了你的代码点点。如果你正在寻找结束串“_”

function searchNames(logins){ 
var str = "_"; 
var newArray=[]; 
for (var i = 0; i < logins.length; i++) { 
    var substring = logins[i][0]; 
    if (substring[substring.length-1]==str) { 
     newArray.push(logins[i]); 
     } 
    } 
     return newArray; 
} 

fiddle

0

jsFiddle Demo

我建议建立一个特殊的函数调用对于这种情况,您可以在过滤器的基础上一个回调比较函数。

function searchArray(arr2d,compare){ 
return arr2d.filter(function(arr){ 
    return compare(arr); 
}); 
} 

一旦到位,你可以把你输入

var input = [ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ]; 

然后调用与输入的搜索和回调

var result = searchArray(input,function(arr){ 
    var s = arr[0];//check that the first string 
    return s[s.length-1] == "_";//ends in _ 
});//this callback function can be modified if the conditions change 

stacksnippet

function searchArray(arr2d,compare){ 
 
return arr2d.filter(function(arr){ 
 
    return compare(arr); 
 
}); 
 
} 
 

 
var input = [ [ "marco", "[email protected]" ], [ "john_", "[email protected]" ] ]; 
 

 
var result = searchArray(input,function(arr){ 
 
    var s = arr[0]; 
 
    return s[s.length-1] == "_"; 
 
}); 
 

 
console.log(result); 
 
document.getElementById('choice').innerHTML = JSON.stringify(result);
<div id="choice"></div>