【发布时间】:2013-11-13 08:36:51
【问题描述】:
我有一个数字数组,我想获取小于特定 x 的第一个数字,然后是大于相同 x 的第一个数字。
var str = 'some random string that is kind of long',
items = [],
position = 10, //varies
itemsBefore,
itemsAfter,
firstItemBeforePosition,
firstItemAfterPosition; //varies
for(var i = 0, length= str.length; i < length; i++){
if(str[i] === ' '){
items.push(i);
}
}
itemsBefore = items.filter(function(item){
return item < position;
});
itemsAfter = items.filter(function(item){
return item > position;
});
firstItemBeforePosition = itemsBefore.length > 0 ? itemsBefore[itemsBefore.length - 1] : 0;
firstItemAfterPosition = itemsAfter.length > 0 ? itemsAfter[0] : str.length;
根据我提供的 JavaScript 代码,items 数组将为 [4, 11, 18, 23, 26, 31, 34],firstItemBeforePosition 为 4,firstItemAfterPosition 为 11。
有没有更好的方法来做到这一点?
谢谢。
【问题讨论】:
-
“有没有更好的方法来做到这一点?”——首先你应该明确实际的问题/任务是什么。它似乎不是关于“数组中的数字”,而是字符串中给定位置之前和之后的第一个空格字符。然后当然有更好的方法来做到这一点 - 假设你不需要实际的数字数组:两个循环,从位置来回移动,直到找到一个空格。
-
你真的想得到单词的开始和结束位置吗?还是您对从数组中找到第一个更大和更小的数字的问题更感兴趣?
-
这也是我一直在努力解决的问题 - 如果您想要 itemsBefore 中的最大数字和 itemsAfter 中的最小数字,您可以使用 Math.max 和 Math.max
-
@CBroe 很好地得到空格字符索引会产生一个数字数组,对吧?两个循环。唔。等一下,谢谢,我试试看!
-
您真的需要那个数字数组(如果需要,为什么?),还是只需要您在显示的代码的最后两行中设置的两个值?
标签: javascript arrays filter