Bagaimana saya akan menulis setara dengan C # String.StartsWith
di JavaScript?
var haystack = 'hello world';
var needle = 'he';
//haystack.startsWith(needle) == true
Catatan: Ini adalah pertanyaan lama, dan seperti yang ditunjukkan dalam komentar ECMAScript 2015 (ES6) memperkenalkan .startsWith
metode. Namun, pada saat penulisan pembaruan ini (2015) Dukungan browser masih jauh dari selesai.
Anda dapat menggunakan ECMAScript 6 ini String.prototype.startsWith()
metode, tapi itu belum didukung di semua browser. Anda akan ingin menggunakan shim / polyfill untuk menambahkannya di browser yang tidak mendukungnya. Menciptakan implementasi yang sesuai semua detail ditata dalam spek sedikit rumit, dan versi yang didefinisikan dalam jawaban ini tidak akan melakukannya; jika Anda menginginkan shim yang setia, gunakan salah satu:
Setelah Anda mengurangi metodenya (atau jika Anda hanya mendukung browser dan mesin JavaScript yang sudah memilikinya), Anda dapat menggunakannya seperti ini:
"Hello World!".startsWith("He"); // true
var haystack = "Hello world";
var prefix = 'orl';
haystack.startsWith(prefix); // false
Alternatif lain dengan .lastIndexOf
:
haystack.lastIndexOf(needle, 0) === 0
Ini terlihat mundur haystack
untuk terjadinya needle
mulai dari indeks 0
dari haystack
. Dengan kata lain, itu hanya memeriksa jika haystack
dimulai dengan needle
.
Pada prinsipnya, ini harus memiliki keunggulan kinerja atas beberapa pendekatan lain:
- Itu tidak mencari keseluruhan
haystack
.
- Itu tidak membuat string sementara yang baru dan kemudian segera membuangnya.
data.substring(0, input.length) === input
Tanpa fungsi pembantu, hanya menggunakan regex .test
metode:
/^He/.test('Hello world')
Untuk melakukan ini dengan string dinamis daripada yang hardcoded (dengan asumsi bahwa string tidak akan berisi karakter kontrol regexp):
new RegExp('^' + needle).test(haystack)
Anda harus memeriksanya Apakah ada fungsi RegExp.escape di Javascript? jika ada kemungkinan bahwa karakter kontrol regexp muncul dalam string.
Saya hanya ingin menambahkan pendapat saya tentang ini.
Saya pikir kita bisa menggunakan seperti ini:
var haystack = 'hello world';
var needle = 'he';
if (haystack.indexOf(needle) == 0) {
// Code if string starts with this substring
}
Solusi terbaik:
function startsWith(str, word) {
return str.lastIndexOf(word, 0) === 0;
}
startsWith("aaa", "a")
true
startsWith("aaa", "ab")
false
startsWith("abc", "abc")
true
startsWith("abc", "c")
false
startsWith("abc", "a")
true
startsWith("abc", "ba")
false
startsWith("abc", "ab")
true
Dan ini dia berakhir dengan jika Anda membutuhkannya juga:
function endsWith(str, word) {
return str.indexOf(word, str.length - word.length) !== -1;
}
Bagi mereka yang lebih memilih untuk prototipe menjadi String:
String.prototype.startsWith || (String.prototype.startsWith = function(word) {
return this.lastIndexOf(word, 0) === 0;
});
String.prototype.endsWith || (String.prototype.endsWith = function(word) {
return this.indexOf(word, this.length - word.length) !== -1;
});
Pemakaian:
"abc".startsWith("ab")
true
"c".ensdWith("c")
true
Berikut adalah sedikit peningkatan pada solusi CMS:
if(!String.prototype.startsWith){
String.prototype.startsWith = function (str) {
return !this.indexOf(str);
}
}
"Hello World!".startsWith("He"); // true
var data = "Hello world";
var input = 'He';
data.startsWith(input); // true
Memeriksa apakah fungsi sudah ada jika browser masa depan mengimplementasikannya dalam kode asli atau jika diimplementasikan oleh pustaka lain. Sebagai contoh, Prototype Library mengimplementasikan fungsi ini.
Menggunakan !
sedikit lebih cepat dan lebih ringkas daripada === 0
meskipun tidak bisa dibaca.