扩展slice为数组中包含字符串'NN'的第一个元素
expand slice to be from first element in array that contains string 'NN'
我有这个代码,从开始值得到一个数组的拼接,计算为包含IN的第一个单词,然后到结束值,计算为包含NN的最后一个单词。
如果数组有一个包含NN的单词,然后有一个包含IN的单词,我如何使起始值成为包含NN的第一个单词。则最终值将与正常值一样,即NN的最后一个实例。
var first = theTopic.split(' ').reduce(function(p, c, i){
return p != -1 ? p : c.indexOf('IN') != -1 ? i : -1;
}, -1);
var last = theTopic.split(' ').reduce(function(p, c, i, a){
return c.indexOf('NN') != -1 ? i : p;
}, -1);
if(theTopic.indexOf('IN') > -1){
lastLocation = (theTopic.split(' ').slice(first, last + 1)).join(' ').replace(/,|'(.*?')/g, ''));
}
所以目前,如果数组看起来像:["PB", "IN", "NN"]
, lastLocation被设置为["IN", "NN"]。目前,如果数组看起来像:["LL", "XC", "NN", "IN", "NN"]
, lastLocation将被设置为["IN", "NN"]。
我想要的是,如果有一个"NN"后面跟着和"IN",例如在["LL", "XC", "NN", "IN", "NN"]
中,那么lastLocation设置为["NN", "IN", "NN"]
;
你已经完成了大部分工作-
一旦你找到了第一个"IN",就回去看看在它之前是否有一个"NN"——如果有的话,更新"first"来指向它。
但是你不需要所有这些复杂的reduce代码-你可以使用数组indexOf
作为第一个,lastIndexOf
作为最后一个。
试试这个:
var theTopic = "LL XC NN IN NN";
var tokens = theTopic.split(' ');
var last_index = tokens.lastIndexOf('NN'); // the last NN
var in_index = tokens.indexOf('IN'); // the IN
var first_index = tokens.lastIndexOf('NN', in_index); // search for last 'NN' before last 'IN'
var result = tokens.slice(first_index, last_index+1).join(' ')
edit: lastIndexOf
不支持IE8及以下版本-如果你想支持IE7-IE8,你可以在列表切片代码运行之前添加此填充代码一次:
[].lastIndexOf || (Array.prototype.lastIndexOf = function(a,b){for(++b>0?0:b=this.length+~~b;~--b&&(!(b in this)||this[b]!==a););return b}
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何使用jquery处理php循环通过元素
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 在Jquery detachment()和appendTo()之后定位元素
- 在动态创建的元素上获取对特定选择器的引用
- 扩展slice为数组中包含字符串'NN'的第一个元素