Penjelasan terperinci tentang penggunaan kaedah lastIndexOf() untuk tatasusunan dan rentetan dalam pengetahuan JavaScript_Basic

WBOY
Lepaskan: 2016-05-16 15:10:55
asal
2211 orang telah melayarinya

Array.prototype.lastIndexOf dan String.prototype.lastIndexOf adalah kaedah yang sangat praktikal, tetapi ramai orang tidak tahu bahawa mereka sebenarnya boleh melepasi dua parameter Parameter kedua menentukan kedudukan permulaan carian:

Tatabahasa

str.lastIndexOf(searchValue[, fromIndex])
Salin selepas log masuk

Kaedah lastIndexOf() mengembalikan kejadian terakhir nilai yang ditentukan dalam rentetan yang memanggil kaedah ini, atau -1 jika tidak ditemui. Cari ke hadapan dari hujung rentetan, bermula dari dariIndex.

Parameter

1.searchValue
Rentetan yang mewakili nilai yang akan ditemui.
2.dariIndeks
Mulakan carian pada kedudukan dalam rentetan di mana kaedah itu dipanggil. Boleh jadi sebarang integer. Nilai lalai ialah str.length. Jika negatif, ia dianggap sebagai 0. Jika fromIndex > str.length, maka fromIndex dianggap sebagai str.length.

Sensitif huruf besar/kecil

kaedah lastIndexOf adalah sensitif huruf besar-besaran. Sebagai contoh, ungkapan berikut mengembalikan -1:

"Blue Whale, Killer Whale".lastIndexOf("blue"); // returns -1

Salin selepas log masuk

Penggunaan lastIndexOf

// Create an array.
var ar = ["ab", "cd", "ef", "ab", "cd"];

// 找到最后一个CD的位置
document.write(ar.lastIndexOf("cd") + "<br/>");
// 输出: 4

// 从正数第二个位置,搜索倒数第一个CD的位置
document.write(ar.lastIndexOf("cd", 2) + "<br/>");
// 输出: 1

// 从倒数第三个搜索最后一个ab的位置
document.write(ar.lastIndexOf("ab", -3) + "<br/>");
// 输出: 0

Salin selepas log masuk

Penggunaan String.lastIndexOf adalah serupa

"canal".lastIndexOf("a") // returns 3
"canal".lastIndexOf("a",2) // returns 1
"canal".lastIndexOf("a",0) // returns -1 从第0个往前搜,不存在'a',返回-1
"canal".lastIndexOf("x") // returns -1

Salin selepas log masuk

Pelaksanaan IE8 lastIndexOf

Walau bagaimanapun, IE8 Microsoft dan ke bawah tidak menyokong Array.lastIndexOf, dan pelaksanaan yang serasi diperlukan. Anda boleh rujuk:

if (!Array.prototype.lastIndexOf) {
 Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) {
 'use strict';

 if (this === void 0 || this === null) {
  throw new TypeError();
 }

 var n, k,
  t = Object(this),
  len = t.length >>> 0;
 if (len === 0) {
  return -1;
 }

 n = len - 1;
 if (arguments.length > 1) {
  n = Number(arguments[1]);
  if (n != n) {
  n = 0;
  }
  else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) {
  n = (n > 0 || -1) * Math.floor(Math.abs(n));
  }
 }

 for (k = n >= 0
   &#63; Math.min(n, len - 1)
   : len - Math.abs(n); k >= 0; k--) {
  if (k in t && t[k] === searchElement) {
  return k;
  }
 }
 return -1;
 };
}

Salin selepas log masuk

Anda boleh menggunakan ES5-Slim untuk menjadikan pelayar lama serasi sepenuhnya dengan sintaks ES5.

Mengapa anda harus mengelak menggunakan untuk dalam

Walau bagaimanapun, perlu diingat bahawa selepas menambah kaedah pada Array.prototype, sintaks for dalam juga akan menghitung kaedah lastIndexOf:

for (var idx in [1,3,5,7,9]) {
 console.log(idx)
}

>> 0 1 2 3 4 lastIndexOf

Salin selepas log masuk

Anda harus menggunakan gelung sebaliknya

for (var idx = 0; idx < [1,3,5,7,9].length; idx++) {
 console.log(idx)
}

Salin selepas log masuk

Masalah ini boleh dilaksanakan menggunakan Object.defineProperty untuk mengelakkan kaedah lastIndexOf untuk dalam penghitungan:

Object.defineProperty(Array, "lastIndexOf", { enumerable: false })

Salin selepas log masuk

Walau bagaimanapun, penyemak imbas yang biasanya memerlukan pelaksanaan yang serasi tidak menyokong kaedah defineProperty sama sekali. Dan dalam kebanyakan penyemak imbas, kerana dalam adalah lebih perlahan daripada gelung, jadi anda harus cuba mengelak daripada menggunakan untuk masuk. Tetapi bagaimana untuk menghitung kunci sifat Objek? Gunakan Object.keys({ a:1 }) untuk mengembalikan tatasusunan kunci.

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!