--- title: String.prototype.normalize() slug: Web/JavaScript/Reference/Global_Objects/String/normalize tags: - ECMAScript6 - JavaScript - Method - Prototype - Reference - String - Unicode translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize ---
Метод normalize()
возвращает форму нормализации Юникода данной строки (если значение не является строкой, сначала оно будет в неё преобразовано).
Одна из особенностей Юникода - возможность считать два разных символа эквивалентными при выполнении сортировки и иных операций, которые основаны на сравнении.
Виды эквивалентности:
- первый - каноническая эквивалентность, когда две последовательности code point являются полностью взаимозаменяемыми.
- второй - совместимость - две совместимые последовательности code point выглядят по-разному, но в некоторых случаях они могут быть взаимозаменяемыми.
'æ' взаимозаменяемый 'ae', но они не являются строго эквивалентными, если не провести некоторую нормализацию
str.normalize([form])
form
"NFC"
, "NFD"
, "NFKC"
или "NFKD"
, определяющих форму нормализации Юникода. Если параметр опущен или равен {{jsxref("Global_Objects/undefined", "undefined")}}, будет использоваться значение "NFC"
.
NFC
— форма нормализации канонической композицией (Normalization Form Canonical Composition, 'NFC'), по умолчанию;NFD
— форма нормализации канонической декомпозицией (Normalization Form Canonical Decomposition, 'NFD');NFKC
— форма нормализации совместимой композицией (Normalization Form Compatibility Composition, 'NFKC');NFKD
— форма нормализации совместимой декомпозицией (Normalization Form Compatibility Decomposition, 'NFKD').form
не является одним из вышеперечисленных значений, будет выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}.Метод normalize()
возвращает указанную форму нормализации Юникода строки. Он не изменяет значение самой строки.
normalize()
let valueStr = ['h', 'ĥ', 'æ', 'ae', 'g', 'ġ'], normArr = valueStr.map(function (text) { return text.normalize(); // (по умолчанию 'NFC') normArr (после сортировки) -> [//return text.normalize('NFD'); // normArr (после сортировки) -> [ //return text.normalize('NFKC'); // normArr (после сортировки) -> [ //return text.normalize('NFKD'); // normArr (после сортировки) -> [ }); //После приведение строк в нормальную форму, мы можем провести сортировку, массива: normArr.sort(function (f,s) { if (f < s) { return -1; } else if (f === s) { return 0; } else { return 1; } }); //Приведение к нормальной форме можно выполнить во время сортировки. Нормализацию при этом можно выполнять с помощью разных форм нормализации let valueStrNorm = ['h', 's', 'ĥ', 'æ', 'ș', 'ae', 'g', 'ġ']; valueStrNorm.sort(function (first, second) { let fN = first.normalize(), sN = second.normalize('NFKC'); if (fN < sN) { return -1; } else if (fN === sN) { return 0; } else { return 1; } }); valueStrNorm.join(', ');//->
{{Compat}}