如何在JavaScript中编写与C#的String.StartsWith等效的代码?
var haystack = 'hello world';
var needle = 'he';
haystack.startsWith(needle) == true
注意:这是一个老问题,正如ECMAScript 2015(ES6)在评论中指出的那样,引入了.startsWith方法。然而,在编写此更新(2015年)时,浏览器支持还远未完成。
如何在JavaScript中编写与C#的String.StartsWith等效的代码?
var haystack = 'hello world';
var needle = 'he';
haystack.startsWith(needle) == true
注意:这是一个老问题,正如ECMAScript 2015(ES6)在评论中指出的那样,引入了.startsWith方法。然而,在编写此更新(2015年)时,浏览器支持还远未完成。
当前回答
我刚刚了解了这个字符串库:
http://stringjs.com/
包括js文件,然后像这样使用S变量:
S('hi there').endsWith('hi there')
它也可以通过安装在NodeJS中使用:
npm install string
然后要求它作为S变量:
var S = require('string');
如果你不喜欢这个字符串库的话,这个网页也有指向其他字符串库的链接。
其他回答
您还可以通过创建自己的原型/扩展名来返回以字符串开头的数组的所有成员
Array.prototype.mySearch = function (target) {
if (typeof String.prototype.startsWith != 'function') {
String.prototype.startsWith = function (str){
return this.slice(0, str.length) == str;
};
}
var retValues = [];
for (var i = 0; i < this.length; i++) {
if (this[i].startsWith(target)) { retValues.push(this[i]); }
}
return retValues;
};
要使用它:
var myArray = ['Hello', 'Helium', 'Hideout', 'Hamster'];
var myResult = myArray.mySearch('Hel');
// result -> Hello, Helium
最好的性能解决方案是停止使用库调用,只需认识到您使用的是两个阵列。手动实现既短又快,比我在这里看到的其他解决方案都快。
function startsWith2(str, prefix) {
if (str.length < prefix.length)
return false;
for (var i = prefix.length - 1; (i >= 0) && (str[i] === prefix[i]); --i)
continue;
return i < 0;
}
有关性能比较(成功与失败),请参阅http://jsperf.com/startswith2/4.(确保您检查了可能胜过我的更高版本。)
我刚刚了解了这个字符串库:
http://stringjs.com/
包括js文件,然后像这样使用S变量:
S('hi there').endsWith('hi there')
它也可以通过安装在NodeJS中使用:
npm install string
然后要求它作为S变量:
var S = require('string');
如果你不喜欢这个字符串库的话,这个网页也有指向其他字符串库的链接。
由于这是如此流行,我认为值得指出的是,在ECMA 6中有一种实现该方法的方法,并且为了准备使用“官方”polyfill,以防止将来出现问题和撕裂。
幸运的是,Mozilla的专家为我们提供了一个:
https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.indexOf(searchString, position) === position;
};
}
请注意,这有一个优点,即在过渡到ECMA 6时可以优雅地忽略它。
我不确定javascript,但在typescript中我做了类似的事情
var str = "something";
(<String>str).startsWith("some");
我想它应该也适用于js。我希望这有帮助!