Hướng dẫn how do i count strings in javascript? - làm cách nào để đếm chuỗi trong javascript?

Tôi đã cập nhật câu trả lời này. Tôi thích ý tưởng sử dụng một trận đấu tốt hơn, nhưng nó chậm hơn:

console.log[["str1,str2,str3,str4".match[/,/g] || []].length]; //logs 3

console.log[["str1,str2,str3,str4".match[new RegExp["str", "g"]] || []].length]; //logs 4

Sử dụng một biểu thức thông thường theo nghĩa đen nếu bạn biết những gì bạn đang tìm kiếm trước đó, nếu không bạn có thể sử dụng hàm tạo

"this is foo bar".split["o"].length - 1;
// returns 2
8 và chuyển trong cờ
"this is foo bar".split["o"].length - 1;
// returns 2
9 làm đối số.

    var stringsearch = "o"
       ,str = "this is foo bar";
    for[var count=-1,index=-2; index != -1; count++,index=str.indexOf[stringsearch,index+1] ];
// returns 2
0 Trả về
    var stringsearch = "o"
       ,str = "this is foo bar";
    for[var count=-1,index=-2; index != -1; count++,index=str.indexOf[stringsearch,index+1] ];
// returns 2
1 không có kết quả do đó
    var stringsearch = "o"
       ,str = "this is foo bar";
    for[var count=-1,index=-2; index != -1; count++,index=str.indexOf[stringsearch,index+1] ];
// returns 2
2

Câu trả lời ban đầu tôi đã thực hiện trong năm 2009 là dưới đây. Nó tạo ra một mảng một cách không cần thiết, nhưng sử dụng phân chia nhanh hơn [tính đến tháng 9 năm 2014]. Tôi mơ hồ, nếu tôi thực sự cần tốc độ thì sẽ không có câu hỏi nào rằng tôi sẽ sử dụng một sự phân chia, nhưng tôi muốn sử dụng Match.using a split is faster [as of September 2014]. I'm ambivalent, if I really needed the speed there would be no question that I would use a split, but I would prefer to use match.

Câu trả lời cũ [từ năm 2009]:

Nếu bạn đang tìm kiếm dấu phẩy:

[mainStr.split[","].length - 1] //3

Nếu bạn đang tìm kiếm STR

[mainStr.split["str"].length - 1] //4

Cả trong câu trả lời của @Lo và trong bài kiểm tra hiệu suất ngớ ngẩn của riêng tôi đều tiến lên phía trước về tốc độ, ít nhất là trong Chrome, nhưng một lần nữa tạo ra mảng thêm chỉ có vẻ không lành mạnh.

Corey

6.3724 Huy hiệu vàng19 Huy hiệu bạc28 Huy hiệu đồng4 gold badges19 silver badges28 bronze badges

Đã trả lời ngày 19 tháng 5 năm 2009 lúc 5:33May 19, 2009 at 5:33

BjornbjornBjorn

66.5K39 Huy hiệu vàng134 Huy hiệu bạc163 Huy hiệu Đồng39 gold badges134 silver badges163 bronze badges

15

Có ít nhất năm cách. Tùy chọn tốt nhất, cũng phải là nhanh nhất [do động cơ Regex gốc] được đặt ở trên cùng.

Phương pháp 1

["this is foo bar".match[/o/g]||[]].length;
// returns 2

Phương pháp 2

"this is foo bar".split["o"].length - 1;
// returns 2

Chia không được khuyến nghị vì nó là đói tài nguyên. Nó phân bổ các phiên bản mới của 'mảng' cho mỗi trận đấu. Đừng thử nó cho một tệp> 100MB thông qua Filereader. Bạn có thể quan sát việc sử dụng tài nguyên chính xác bằng tùy chọn Profiler của Chrome.Chrome's profiler option.

Phương pháp 3

    var stringsearch = "o"
       ,str = "this is foo bar";
    for[var count=-1,index=-2; index != -1; count++,index=str.indexOf[stringsearch,index+1] ];
// returns 2

Phương pháp 4

Tìm kiếm một ký tự duy nhất

    var stringsearch = "o"
       ,str = "this is foo bar";
    for[var i=count=0; i[9, 10]
    [9, 10].length
    // returns 2

Chia sẻ: Tôi đã thực hiện ý chính này, với 8 phương thức tính nhân vật, vì vậy chúng tôi có thể trực tiếp gộp và chia sẻ ý tưởng của mình - chỉ để giải trí, và có lẽ một số điểm chuẩn thú vị :] I made this gist, with currently 8 methods of character-counting, so we can directly pool and share our ideas - just for fun, and perhaps some interesting benchmarks :]

User229044 ♦

226K40 Huy hiệu vàng325 Huy hiệu bạc334 Huy hiệu đồng40 gold badges325 silver badges334 bronze badges

Đã trả lời ngày 20 tháng 5 năm 2012 lúc 7:54May 20, 2012 at 7:54

Lorenz lo Sauerlorenz lo SauerLorenz Lo Sauer

22.7K13 Huy hiệu vàng81 Huy hiệu bạc86 Huy hiệu đồng13 gold badges81 silver badges86 bronze badges

10

Thêm chức năng này vào nguyên mẫu Sting:

String.prototype.count=function[c] { 
  var result = 0, i = 0;
  for[i;i

Bài Viết Liên Quan

Chủ Đề