示例:" abc abc ab a" .indexOfList(" abc")返回[0,4]
我的代码:
String.prototype.indexOfList=function(word){
var l=[];
for(var i=0;i<this.length;i++){ //For each character
var pushed=(this[i]==word[0])&&(word.length+i<=this.length);
if (pushed) {
for(var j=1;j<word.length;j++){
if (word[j]!=this[i+j]) {
pushed=false; break;
}
}
}
if (pushed) {
l.push(i);
}
}
return l;
}
是否有比这更好更小的方式?
答案 0 :(得分:1)
您可以使用正则表达式match
命令:
var re = /abc/g,
str = "abc abc ab a";
var pos = [];
while ((match = re.exec(str)) != null) {
pos.push(match.index);
}
答案 1 :(得分:1)
有一个可以处理重叠字符串的版本,即字符aaa
的格式aaaaa
应该返回[0,1,2]
。
function indexOfList(needle, haystack) {
const result = [];
let i = 0;
while (haystack.includes(needle, i)) {
const match = haystack.indexOf(needle, i);
result.push(match);
i = match + 1;
}
return result;
}
indexOfList("abc", "abc abc ab a"), // [0, 4]
indexOfList("aaa", "aaaabc abc ab a") // [0, 1]
我还建议不要扩展原生对象的原型。它可能导致一个非常讨厌的名字冲突。
考虑你的同事(甚至语言维护者)添加一个同名的函数。
答案 2 :(得分:0)
无需复杂化。与此类似的方法已经存在:String.indexOf。
您还可以将第二个参数传递给此方法,告诉它从哪里开始查找。如果继续增加第二个参数,则可以快速找到每个参数。
String.prototype.indexOfList = function(word) {
var start = this.indexOf(word);
var l = [start]
if(start == -1) {
return [-1, -1];
}
var index = start;
for(var i = start + word.length; i < this.length - word.length; i = index) {
index = this.indexOf(word, i);
if(index == -1) {
break;
}
l.push(index);
}
return l;
}
这将从第一次出现开始,并继续在单词出现的每个索引上添加。
答案 3 :(得分:0)
使用File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\views\generic\base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:\Users\lenovo\Desktop\Grooved2\grooved\src\store\views.py" in get
560. data = ChartData.check_order_data()
File "C:\Users\lenovo\Desktop\Grooved2\grooved\src\store\utils.py" in check_order_data
15. print datetime.datetime.strptime(order.order.timestamp, "%Y-%m-%d %H:%M:%S.%f")
功能
indexOf
答案 4 :(得分:0)
您可以使用replace
String.prototype.indexOfList = function(word){
var l=[];
this.replace(new RegExp(word,"g"), (a,i) => l.push(i));
return l;
}
console.log("abc abc ab a".indexOfList("abc"));