Làm cách nào để cắt một chuỗi thành N ký tự trong Javascript?


169

Làm thế nào tôi có thể, bằng cách sử dụng Javascript, tạo một hàm sẽ cắt chuỗi được truyền dưới dạng đối số, theo độ dài đã chỉ định, cũng được truyền dưới dạng đối số. Ví dụ:

var string = "this is a string";
var length = 6;
var trimmedString = trimFunction(length, string);

// trimmedString should be:
// "this is"

Bất cứ ai cũng có ý tưởng? Tôi đã nghe nói về việc sử dụng chuỗi con, nhưng không hiểu lắm.


1
"đây là" = 7 ký tự, bạn có ý định đó không?
aziz trừng phạt

Như đã nói trong câu hỏi, tôi không chắc chắn làm thế nào để sử dụng chuỗi con để làm điều này. Bạn có thể vui lòng cho tôi một ví dụ? Tôi sẽ chấp nhận là một câu trả lời tất nhiên, nếu nó hoạt động;) @Interstellar_Coder oops, lỗi đánh máy!

Câu trả lời:


345

Tại sao không chỉ sử dụng chuỗi con ... string.substring(0, 7);Đối số đầu tiên (0) là điểm bắt đầu. Đối số thứ hai (7) là điểm kết thúc (loại trừ). Thêm thông tin ở đây.

var string = "this is a string";
var length = 7;
var trimmedString = string.substring(0, length);

Cảm ơn! Hoạt động hoàn hảo. Tôi sẽ đánh dấu nó là câu trả lời ngay khi hết thời gian!

23
Và nếu bạn muốn các hình elip cho các chuỗi vượt quá độ dài tối đa (có thể hữu ích hơn cho max dài hơn): var string = "đây là một chuỗi"; chiều dài var = 20; var trimmedString = string.length> chiều dài? chuỗi.sub chuỗi (0, chiều dài - 3) + "...": chuỗi.sub chuỗi (0, chiều dài);
Sẽ

5
Xin lưu ý rằng string.substr (bắt đầu, độ dài) hoạt động lạ, nó sẽ trả về sản phẩm nào nếu độ dài lớn hơn độ dài của chuỗi. chuỗi.sub chuỗi (bắt đầu, kết thúc) hoạt động như mong đợi, nghĩa là nó sẽ trả lại chuỗi đến hết nếu không có đủ ký tự cho đầu cuối đã cho!
centic 11/2/2015

1
Sử dụng string.substr. Nó không có hành vi lạ, bất chấp nhận xét trước đó
Gibolt

.substring(from, to)chỉ số . .substr (từ, độ dài) không, Ngoài ra .substr () được sử dụng để có sự không nhất quán trong IE khi đối số đầu tiên là âm.
Bob Stein

47

Sao chép nhận xét của Will vào câu trả lời, vì tôi thấy nó hữu ích:

var string = "this is a string";
var length = 20;
var trimmedString = string.length > length ? 
                    string.substring(0, length - 3) + "..." : 
                    string;

Cảm ơn Will.

Và một jsfiddle cho bất cứ ai quan tâm https://jsfiddle.net/t354gw7e/ :)


1
Không có điểm nào trong việc sử dụng string.substring(0, length)trong trường hợp khác, vì chuỗi được đảm bảo là <= 20 ký tự tại thời điểm đó, chỉ cần sử dụng string.
Nick Sweeting 17/05/2016

15

Tôi đề nghị sử dụng một phần mở rộng cho sự gọn gàng mã. Lưu ý rằng việc mở rộng một nguyên mẫu đối tượng nội bộ có thể có khả năng gây rối với các thư viện phụ thuộc vào chúng.

String.prototype.trimEllip = function (length) {
  return this.length > length ? this.substring(0, length) + "..." : this;
}

Và sử dụng nó như:

var stringObject= 'this is a verrrryyyyyyyyyyyyyyyyyyyyyyyyyyyyylllooooooooooooonggggggggggggsssssssssssssttttttttttrrrrrrrrriiiiiiiiiiinnnnnnnnnnnnggggggggg';
stringObject.trimEllip(25)

5
Tại sao không? Bởi vì bạn đang ghi đè nguyên mẫu của một đối tượng tiêu chuẩn .trim(). Điều này có thể gây ra hành vi bất ngờ trong các thư viện và công cụ khác mà bạn có thể sử dụng.
Oleg Berman

1
đó là những gì tôi cần
naneri


2

Hơi muộn ... tôi phải trả lời. Đây là cách đơn giản nhất.

// JavaScript
function fixedSize_JS(value, size) {
  return value.padEnd(size).substring(0, size);
}

// JavaScript (Alt)
var fixedSize_JSAlt = function(value, size) {
  return value.padEnd(size).substring(0, size);
}

// Prototype (preferred)
String.prototype.fixedSize = function(size) {
  return this.padEnd(size).substring(0, size);
}

// Overloaded Prototype
function fixedSize(value, size) {
  return value.fixedSize(size);
}

// usage
console.log('Old school JS -> "' + fixedSize_JS('test (30 characters)', 30) + '"');
console.log('Semi-Old school JS -> "' + fixedSize_JSAlt('test (10 characters)', 10) + '"');
console.log('Prototypes (Preferred) -> "' + 'test (25 characters)'.fixedSize(25) + '"');
console.log('Overloaded Prototype (Legacy support) -> "' + fixedSize('test (15 characters)', 15) + '"');

Từng bước một. .padEnd - Guarentees độ dài của chuỗi

"Phương thức padEnd () đệm chuỗi hiện tại với một chuỗi đã cho (lặp lại, nếu cần) để chuỗi kết quả đạt đến một độ dài nhất định. Đệm được áp dụng từ cuối (bên phải) của chuỗi hiện tại. Nguồn cho tương tác này ví dụ được lưu trữ trong kho GitHub. " nguồn: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ mẹo

.sub chuỗi - giới hạn độ dài bạn cần

Nếu bạn chọn thêm dấu chấm lửng, hãy thêm chúng vào đầu ra.

Tôi đã đưa ra 4 ví dụ về cách sử dụng JavaScript phổ biến. Tôi đặc biệt khuyên bạn nên sử dụng nguyên mẫu Chuỗi với Quá tải để hỗ trợ kế thừa. Nó làm cho nó dễ dàng hơn nhiều để thực hiện và thay đổi sau này.


Xin chào! Thật tốt khi bao gồm một số lời giải thích về những gì đang xảy ra với mã của bạn. Cho rằng giải pháp của bạn tương tự như thế nào với câu trả lời được chấp nhận, có lẽ là một chi tiết nhỏ về những gì padEndđang làm.
Mattie

Giải pháp của tôi, sạch hơn và chuẩn hơn cộng với nó cho thấy nhiều cách sử dụng. Phương thức padEnd () đệm chuỗi hiện tại bằng một chuỗi đã cho (lặp lại, nếu cần) để chuỗi kết quả đạt đến một độ dài nhất định. Phần đệm được áp dụng từ cuối (bên phải) của chuỗi hiện tại. Nguồn cho ví dụ tương tác này được lưu trữ trong kho GitHub. nguồn: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
mẹo

1
Tôi không tranh luận về chất lượng câu trả lời của bạn. Chỉ là một gợi ý về cách làm cho nó tốt hơn. Giải thích của bạn là tuyệt vời - chỉnh sửa câu trả lời của bạn và đặt nó trong đó!
Mattie

Xin chào Matt, tôi thích câu trả lời của bạn. Thật đáng tiếc khi bạn đang trả lời một câu hỏi hơi khác một chút. Ban đầu, ông hỏi về việc cắt xén một chuỗi, không phải là độ dài chuỗi cố định trả về.
Jakub Kriz

0
    let trimString = function (string, length) {
      return string.length > length ? 
             string.substring(0, length) + '...' :
             string;
    };

Ca sử dụng,

let string = 'How to trim a string to N chars in Javascript';

trimString(string, 20);

//How to trim a string...

-1

Tôi nghĩ rằng bạn nên sử dụng mã này :-)

    // sample string
            const param= "Hi you know anybody like pizaa";

         // You can change limit parameter(up to you)
         const checkTitle = (str, limit = 17) => {
      var newTitle = [];
      if (param.length >= limit) {
        param.split(" ").reduce((acc, cur) => {
          if (acc + cur.length <= limit) {
            newTitle.push(cur);
          }
          return acc + cur.length;
        }, 0);
        return `${newTitle.join(" ")} ...`;
      }
      return param;
    };
    console.log(checkTitle(str));

// result : Hi you know anybody ...

1
Tôi tò mò về lý do tại sao bạn thêm câu trả lời này. Câu hỏi đã có câu trả lời được chấp nhận và một số câu trả lời hợp lý khác, tất cả đều đơn giản hơn câu hỏi này. Hay là ":-)" của bạn có ý định biến điều này thành một trò đùa?
Scott Sauyet

Lưu ý rằng câu trả lời được chấp nhận cũng là câu trả lời được đánh giá cao nhất. Tôi nghĩ bạn đang cố gắng giải quyết một vấn đề khác ở đây. (Và tôi đã không nhận thấy rằng khi bình luận sớm hơn.) Đó không phải là vấn đề không thể xảy ra, nhưng cuối cùng nó chỉ liên quan một chút đến câu hỏi được hỏi. Bạn cũng có một hiệu ứng kỳ lạ là với đầu vào đã cho, chuỗi đầu ra của bạn 23dài các ký tự, dài hơn 17tham số mặc định cộng với các 4ký tự trong hậu tố " ...". Điều đó có vẻ kỳ lạ.
Scott Sauyet

Tôi cũng nghĩ rằng điều này có thể sử dụng một thực hiện đơn giản hơn .
Scott Sauyet
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.