Array.prototype.toLocaleString()

Метод toLocaleString() повертає рядок, що відображає елементи масиву. Елементи перетворюються у рядки, використовуючи свої методи toLocaleString, і ці рядки розділяються символами, що відповідають локалі (наприклад, комою “,”).

Синтаксис

arr.toLocaleString([locales[, options]]);

Параметри

locales Optional
Рядок з міткою мови BCP 47 або масив таких рядків. Щодо загального вигляду та інтерпретації аргументу locales дивіться  Intl.
options Optional
Об'єкт з властивостями конфігурації, для числових значень дивіться Number.prototype.toLocaleString(), а для дат Date.prototype.toLocaleString().

Значення, що повертається

Текстовий рядок, що відображає елементи масиву.

Приклади

Використання locales та options

Елементи масиву перетворюються на рядки, використовуючи свої методи toLocaleString.

Завжди відображати знак валюти для рядків та чисел у масиві prices:

var prices = ['¥7', 500, 8123, 12];
prices.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' });

// "¥7,¥500,¥8,123,¥12"

Більше прикладів дивіться на сторінках Intl, NumberFormat та DateTimeFormat.

Поліфіл

// https://tc39.github.io/ecma402/#sup-array.prototype.tolocalestring
if (!Array.prototype.toLocaleString) {
  Object.defineProperty(Array.prototype, 'toLocaleString', {
    value: function(locales, options) {
      // 1. Нехай O дорівнює ? ToObject(this value).
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      var a = Object(this);

      // 2. Нехай len дорівнює ? ToLength(? Get(A, "length")).
      var len = a.length >>> 0;

      // 3. Нехай separator дорівнює рядковому значенню
      //    роздільника елементів списку згідно поточної
      //    локалі середовища виконання (це значення
      //    визначається реалізацією).
      // ЗАУВАГА: В даному випадку ми використовуємо кому
      var separator = ',';

      // 4. Якщо len дорівнює нулю, повернути порожінй рядок.
      if (len === 0) {
        return '';
      }

      // 5. Нехай firstElement дорівнює ? Get(A, "0").
      var firstElement = a[0];
      // 6. Якщо firstElement дорівнює undefined або null, тоді
      //  a. Нехай R дорівнює порожньому рядку.
      // 7. Інакше,
      //  a. Нехай R дорівнює ?
      //     ToString(?
      //       Invoke(
      //        firstElement,
      //        "toLocaleString",
      //        « locales, options »
      //       )
      //     )
      var r = firstElement == null ?
        '' : firstElement.toLocaleString(locales, options);

      // 8. Нехай k дорівнює 1.
      var k = 1;

      // 9. Повторювати, доки k < len
      while (k < len) {
        // а. Нехай S дорівнює рядковому значенню, утвореному
        //   об'єднанням R та separator.
        var s = r + separator;

        // б. Нехай nextElement дорівнює ? Get(A, ToString(k)).
        var nextElement = a[k];

        // в. Якщо nextElement дорівнює undefined або null, тоді
        //   i. Нехай R дорівнє порожньому рядку.
        // г. Інакше,
        //   i. Нехай R дорівнює ?
        //     ToString(?
        //       Invoke(
        //        nextElement,
        //        "toLocaleString",
        //        « locales, options »
        //       )
        //     )
        r = nextElement == null ?
          '' : nextElement.toLocaleString(locales, options);

        // ґ. Нехай R дорівнює рядковому значенню, утвореному
        //   об'єднанням S та R.
        r = s + r;

        // д. Збільшити k на 1.
        k++;
      }

      // 10. Повернути R.
      return r;
    }
  });
}

Якщо вам потрібно підтримувати зовсім застарілі рушії JavaScript, які не підтримують Object.defineProperty, краще взагалі не використовувати поліфіли методів Array.prototype, оскільки ви не зможете зробити їх не перелічуваними.

Специфікації

Специфікація Статус Коментар
ECMAScript (ECMA-262)
The definition of 'Array.prototype.toLocaleString' in that specification.
Living Standard Початкове визначення було надане у ECMAScript 3.
ECMAScript Internationalization API (ECMA-402)
The definition of 'Array.prototype.toLocaleString' in that specification.
Living Standard Це визначення замінює визначення, надане у ECMA-262.

Сумісність з веб-переглядачами

BCD tables only load in the browser

Див. також