我有一个来自AZ的ABC名称数组,我希望得到从A到J的所有名称。除了检查每个字符的第一个字母与所有字母的数组之外,还有什么方法可以做到这一点。 A到J?
示例:
var array=['Amy','Dolly','Jason','Madison','Patricia'];
我想要一系列Amy,Dolly和Jason。
答案 0 :(得分:7)
您可以使用{/ 3}}功能
var array=['Amy','Dolly','Jason','Madison','Patricia'];
var filtered = array.filter(function(el){return el[0]>='A' && el[0]<='J'})
var array=['Amy','Dolly','Jason','Madison','Patricia'];
var filtered = array.filter(function(el){return el[0]>='A' && el[0]<='J'});
document.getElementById('res').innerHTML = JSON.stringify(array) + '<br />' + JSON.stringify(filtered);
<div id="res"></div>
上面的代码检查数组中的所有元素,如果你想避免它并且数组已经排序,你可以使用简单的 for loop
var array=['Amy','Dolly','Jason','Madison','Patricia'];
var result=[];
for(var i=0;i<len=array.length; i<len && (array[i][0]>='A' && array[i][0]<='J'); i++){
result.push(array[i]);
}
或同一个班轮
for(var i=0, result=[], len=array.length; i<len && (array[i][0]>='A' && array[i][0]<='J');result.push(array[i]),i++);
<{1>}中的- 过滤集合;
另一种方法是找到索引,然后使用 slice ,如
result
来自@dandavis的评论与过滤器和正则表达式
的评论for(var i=0, len=array.length; i<len && (array[i][0]>='A' && array[i][0]<='J');i++);
var result = array.slice(0,i);
改变
var filtered = array.filter(/./.test, /^[A-J]/);
答案 1 :(得分:1)
您可以使用字符的ascii-value并使用过滤器来获得所需的结果。 “J”的字符代码值为74,“A”的字符代码值为65。
array.filter(function(v) { return v.charCodeAt(0) >= 65 && v.charCodeAt(0) <= 74 })
答案 2 :(得分:1)
您可以使用正则表达式执行此操作..
var array=['Amy','Dolly','Jason','Madison','Patricia'];
var reg = new RegExp('^[A-J]');
var arrTemp=[];
var intLength = array.length;
for(var i=0;i<intLength ;i++){
if(reg.test(array[i])) {
arrTemp.push(array[i])
}
}
console.log(arrTemp)
如果你想要考虑案例敏感性,那么你可以编写像
这样的正则表达式var reg = new RegExp('^[A-Ja-j]');
答案 3 :(得分:0)
var array = ['Amy', 'Dolly', 'Jason', 'Madison', 'Patricia'],
bound = { lower: 'A', upper: 'J' },
newArray = [],
i = 0, j, l = array.length;
// lookup for the first element of the array which is smaller than the lower bound
while (i < l && array[i][0] < bound.lower) {
i++;
}
j = i;
// lookup for the end of the upper bound and skip the rest
while (j < l && array[j][0] <= bound.upper) {
j++;
}
// build new array
newArray = array.slice(i, j);