Как правильно обрезать строку и заменить обрезаное многоточием?
А вам точно надо делать это джаваскриптом? text-overflow: ellipsis не подойдет?
Если нет, то понадобится отрендерить строку в браузере и получить размеры DOM-элемента, чтобы затем вычислить допустимое количество символов.
Не знаю как правильно, но я делал так:// Метод скоращения строки
// Показывает последние n-исмовлов, остальное заменяет на ...
String.prototype.shortStr = function(n) { 
    const dots = '...'
    let string = this.toString()

    if ( string.length <= n ){
        return this
    } else {
        return dots + string.substring(string.length - n)
    }
}
Если что не так - принимаю критику