SORU
14 Mart 2009, CUMARTESİ


Bir dize kontrol etmek için nasıl "StartsWith" başka bir dize?

Nasıl C eşdeğer yazıyorum#'Javascript s String.StartsWith?

var data = 'hello world';
var input = 'he';

//data.startsWith(input) == true

Not: Bu eski bir soru, işaret açıklamalarda ECMA 2015 (ES6) tanıttı startsWith, ancak, zaman yazma bu güncelleme (2015) tarayıcı desteği Daha tam.

CEVAP
14 Mart 2009, CUMARTESİ


String prototype Bu işlevi ekleyebilirsiniz:

if (typeof String.prototype.startsWith != 'function') {
  // see below for better implementation!
  String.prototype.startsWith = function (str){
    return this.indexOf(str) === 0;
  };
}

Doğrudan dize değerleri kullanabilirsiniz:

"Hello World!".startsWith("He"); // true

var data = "Hello world";
var input = 'He';
data.startsWith(input); // true

Düzenleme:Unutmayın kontrol ediyorum eğer işlevi varsa, önce tanımlama, çünkü geleceğin dili olabilir bu dizeleri ekstra yöntemler tanımlanan yerleşik işlevleri ve yerel uygulamalar her zaman daha hızlı ve tercih edilen, ECMAScript Harmony String Extras öneri.

Düzenleme:Diğerleri de belirtildiği gibi, indexOf büyük dizeleri için verimsiz olacak, karmaşıklığı O(N). Bir sabit zaman çözüm (O(1)) kullanabilirsiniz ya da, substring @cobbal önerilen veya String.prototype.slice, benzer şekilde davranır (not olduğunu bilmiyorum tavsiye kullanarak substr, çünkü tutarsız arasındaki uygulamaları (özellikle üzerinde JScript) ):

if (typeof String.prototype.startsWith != 'function') {
  String.prototype.startsWith = function (str){
    return this.slice(0, str.length) == str;
  };
}

Arasındaki fark substring slice aslında slice alabileceği negatif indeksler, nasýl karakter sonunda dize, örneğin yazabilirsiniz karşılığı endsWith yöntem:

if (typeof String.prototype.endsWith != 'function') {
  String.prototype.endsWith = function (str){
    return this.slice(-str.length) == str;
  };
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hudson Music

    Hudson Music

    13 Mart 2007
  • Ludique

    Ludique

    21 NİSAN 2009
  • RD

    RD

    19 NİSAN 2006