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

  • Ampisound

    Ampisound

    12 Kasım 2006
  • Britec09

    Britec09

    4 Mart 2009
  • jeffisthecoolguy

    jeffisthecoo

    17 HAZİRAN 2013