Baseline Widely available
СводкаÐеÑод charAt()
возвÑаÑÐ°ÐµÑ ÑказаннÑй Ñимвол из ÑÑÑоки.
index
Целое ÑиÑло Ð¾Ñ 0 до Ð´Ð»Ð¸Ð½Ñ ÑÑÑоки минÑÑ 1.
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑÑÑоке идÑÑ Ñлева напÑаво. ÐÐ½Ð´ÐµÐºÑ Ð¿ÐµÑвого Ñимвола Ñавен 0, а поÑледнего Ñимвола в ÑÑÑоке stringName
Ñавен stringName.length - 1
. ÐÑли пÑедоÑÑавленнÑй вами паÑамеÑÑ index
вÑÑ
Ð¾Ð´Ð¸Ñ Ð·Ð° пÑÐµÐ´ÐµÐ»Ñ ÑÑого диапазона, JavaScript веÑнÑÑ Ð¿ÑÑÑÑÑ ÑÑÑокÑ.
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² ÑазлиÑнÑÑ
позиÑиÑÑ
в ÑÑÑоке "ÐивнÑй новÑй миÑ"
:
var anyString = "ÐивнÑй новÑй миÑ";
console.log("Символ по индекÑÑ 0 Ñавен '" + anyString.charAt(0) + "'");
console.log("Символ по индекÑÑ 1 Ñавен '" + anyString.charAt(1) + "'");
console.log("Символ по индекÑÑ 2 Ñавен '" + anyString.charAt(2) + "'");
console.log("Символ по индекÑÑ 3 Ñавен '" + anyString.charAt(3) + "'");
console.log("Символ по индекÑÑ 4 Ñавен '" + anyString.charAt(4) + "'");
console.log("Символ по индекÑÑ 5 Ñавен '" + anyString.charAt(5) + "'");
console.log("Символ по индекÑÑ 999 Ñавен '" + anyString.charAt(999) + "'");
ÐÑÐ¾Ñ ÐºÐ¾Ð´ оÑобÑÐ°Ð·Ð¸Ñ ÑледÑÑÑее:
Символ по индекÑÑ 0 Ñавен 'Ð'
Символ по индекÑÑ 1 Ñавен 'и'
Символ по индекÑÑ 2 Ñавен 'в'
Символ по индекÑÑ 3 Ñавен 'н'
Символ по индекÑÑ 4 Ñавен 'Ñ'
Символ по индекÑÑ 5 Ñавен 'й'
Символ по индекÑÑ 999 Ñавен ''
ÐÑимеÑ: полÑÑение ÑелÑÑ
Ñимволов
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, как обойÑи ÑÑÑÐ¾ÐºÑ Ð² Ñикле, каждÑй Ñаз гаÑанÑиÑованно полÑÑÐ°Ñ ÑелÑй Ñимвол, даже еÑли ÑÑÑока ÑодеÑÐ¶Ð¸Ñ ÑимволÑ, не помеÑаÑÑиеÑÑ Ð½Ð° ÐазовÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÑзÑковÑÑ Ð¿Ð»Ð¾ÑкоÑÑÑ (ÐÐÐ).
var str = "A \uD87E\uDC04 Z"; // Также можно иÑполÑзоваÑÑ Ð½Ðµ-ÐÐÐ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ð°Ð¿ÑÑмÑÑ
for (var i = 0, chr; i < str.length; i++) {
if ((chr = getWholeChar(str, i)) === false) {
continue;
}
// ÐомеÑÑиÑе ÑÑи ÑÑÑоки в Ñамое наÑало каждого Ñикла, пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð² ÑÑнкÑÐ¸Ñ ÑÑÑокÑ
// и ÑекÑÑÑÑ Ð¸ÑеÑаÑиÑ; возвÑаÑÐ°ÐµÐ¼Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð±ÑдÑÑ Ð¿ÑедÑÑавлÑÑÑ
// оÑделÑнÑй Ñимвол
console.log(chr);
}
function getWholeChar(str, i) {
var code = str.charCodeAt(i);
if (isNaN(code)) {
return ""; // ÐозиÑÐ¸Ñ Ð½Ðµ найдена
}
if (code < 0xd800 || code > 0xdfff) {
return str.charAt(i);
}
// СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ (поÑледнее ÑиÑло можно измениÑÑ Ð½Ð° 0xDB7F,
// ÑÑÐ¾Ð±Ñ ÑÑакÑоваÑÑ ÑÑаÑÑÑÑ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð² ÑаÑÑной плоÑкоÑÑи как
// одиноÑнÑй Ñимвол)
if (0xd800 <= code && code <= 0xdbff) {
if (str.length <= i + 1) {
throw "СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· ÑледÑÑÑей младÑей";
}
var next = str.charCodeAt(i + 1);
if (0xdc00 > next || next > 0xdfff) {
throw "СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· ÑледÑÑÑей младÑей";
}
return str.charAt(i) + str.charAt(i + 1);
}
// ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ (0xDC00 <= code && code <= 0xDFFF)
if (i === 0) {
throw "ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· пÑедÑеÑÑвÑÑÑей ÑÑаÑÑей";
}
var prev = str.charCodeAt(i - 1);
// (поÑледнее ÑиÑло можно измениÑÑ Ð½Ð° 0xDB7F, ÑÑÐ¾Ð±Ñ ÑÑакÑоваÑÑ ÑÑаÑÑÑÑ
// ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð² ÑаÑÑной плоÑкоÑÑи как одиноÑнÑй Ñимвол)
if (0xd800 > prev || prev > 0xdbff) {
throw "ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· пÑедÑеÑÑвÑÑÑей ÑÑаÑÑей";
}
// ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пÑопÑÑÑиÑÑ Ð¼Ð»Ð°Ð´ÑÑÑ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ,
// коÑоÑÑÑ Ð¼Ñ Ñже обÑабоÑали
return false;
}
Ð ÑÑеде, поддеÑживаÑÑей JavaScript 1.7+ (напÑимеÑ, в Firefox), коÑоÑÑй позволÑÐµÑ Ð´ÐµÑÑÑÑкÑÑÑиÑÑÑÑее пÑиÑваивание, можно иÑполÑзоваÑÑ Ð±Ð¾Ð»ÐµÐµ лакониÑнÑÑ Ð¸ более гибкÑÑ Ð°Ð»ÑÑеÑнаÑÐ¸Ð²Ñ Ð² Ñом ÑмÑÑле, ÑÑо она авÑомаÑиÑеÑки ÑвелиÑÐ¸Ð²Ð°ÐµÑ ÑÑÑÑÑик (еÑли Ñимвол гаÑанÑиÑованно ÑвлÑеÑÑÑ ÑÑÑÑогаÑной паÑой).
var str = "A\uD87E\uDC04Z"; // Также можно иÑполÑзоваÑÑ Ð½Ðµ-ÐÐÐ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ð°Ð¿ÑÑмÑÑ
for (var i = 0, chr; i < str.length; i++) {
[chr, i] = getWholeCharAndI(str, i);
// ÐомеÑÑиÑе ÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² Ñамое наÑало каждого Ñикла, пеÑÐµÐ´Ð°Ð²Ð°Ñ Ð² ÑÑнкÑÐ¸Ñ ÑÑÑокÑ
// и ÑекÑÑÑÑ Ð¸ÑеÑаÑиÑ; возвÑаÑаемÑй маÑÑив бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾ÑделÑнÑй Ñимвол и
// новое знаÑение ÑÑÑÑÑика Ñикла 'i' (измениÑÑÑ ÑолÑко пÑи вÑÑÑеÑе ÑÑÑÑогаÑной паÑÑ)
console.log(chr);
}
function getWholeCharAndI(str, i) {
var code = str.charCodeAt(i);
if (isNaN(code)) {
return ""; // ÐозиÑÐ¸Ñ Ð½Ðµ найдена
}
if (code < 0xd800 || code > 0xdfff) {
return [str.charAt(i), i]; // ÐбÑÑнÑй Ñимвол, оÑÑавлÑем пеÑеменнÑÑ 'i' неизменной
}
// СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ (поÑледнее ÑиÑло можно измениÑÑ Ð½Ð° 0xDB7F,
// ÑÑÐ¾Ð±Ñ ÑÑакÑоваÑÑ ÑÑаÑÑÑÑ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð² ÑаÑÑной плоÑкоÑÑи как
// одиноÑнÑй Ñимвол)
if (0xd800 <= code && code <= 0xdbff) {
if (str.length <= i + 1) {
throw "СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· ÑледÑÑÑей младÑей";
}
var next = str.charCodeAt(i + 1);
if (0xdc00 > next || next > 0xdfff) {
throw "СÑаÑÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· ÑледÑÑÑей младÑей";
}
return [str.charAt(i) + str.charAt(i + 1), i + 1];
}
// ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ (0xDC00 <= code && code <= 0xDFFF)
if (i === 0) {
throw "ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· пÑедÑеÑÑвÑÑÑей ÑÑаÑÑей";
}
var prev = str.charCodeAt(i - 1);
// (поÑледнее ÑиÑло можно измениÑÑ Ð½Ð° 0xDB7F, ÑÑÐ¾Ð±Ñ ÑÑакÑоваÑÑ ÑÑаÑÑÑÑ
// ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð² ÑаÑÑной плоÑкоÑÑи как одиноÑнÑй Ñимвол)
if (0xd800 > prev || prev > 0xdbff) {
throw "ÐладÑÐ°Ñ ÑаÑÑÑ ÑÑÑÑогаÑной паÑÑ Ð±ÐµÐ· пÑедÑеÑÑвÑÑÑей ÑÑаÑÑей";
}
// ÐозвÑаÑаем ÑледÑÑÑий Ñимвол (и ÑвелиÑиваем ÑÑÑÑÑик)
return [str.charAt(i + 1), i + 1];
}
ÐÑимеÑ: добавление к меÑÐ¾Ð´Ñ charAt()
поддеÑжки Ñимволов не в Ðазовой многоÑзÑковой плоÑкоÑÑи (ÐÐÐ)
Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пÑÐ¸Ð¼ÐµÑ Ð²ÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±Ð¾Ð»ÐµÐµ полезен Ñем, кÑо Ñ Ð¾ÑÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ в плоÑкоÑÑи ÐÐÐ (поÑколÑÐºÑ Ð¾Ð½ не ÑÑебÑÐµÑ Ð¾Ñ Ð²ÑзÑваÑÑей ÑÑоÑÐ¾Ð½Ñ Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ Ñом, где Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑÑеÑиÑÑÑÑ Ñимвол из не-ÐÐÐ), в ÑлÑÑае, еÑли кÑо-Ñо Ð¶ÐµÐ»Ð°ÐµÑ Ð²ÑбиÑаÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾ индекÑÑ Ð¸ ÑÑакÑоваÑÑ ÑÑÑÑогаÑнÑÑ Ð¿Ð°ÑÑ Ð²Ð½ÑÑÑи ÑÑÑоки как один Ñимвол, он Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑледÑÑÑий код:
function fixedCharAt(str, idx) {
var ret = "";
str += "";
var end = str.length;
var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
while (surrogatePairs.exec(str) != null) {
var li = surrogatePairs.lastIndex;
if (li - 2 < idx) {
idx++;
} else {
break;
}
}
if (idx >= end || idx < 0) {
return "";
}
ret += str.charAt(idx);
if (
/[\uD800-\uDBFF]/.test(ret) &&
/[\uDC00-\uDFFF]/.test(str.charAt(idx + 1))
) {
// ÐеÑеÑагиваем ÑеÑез один, поÑколÑÐºÑ Ð¾Ð´Ð¸Ð½ «Ñимвол» ÑвлÑеÑÑÑ ÑаÑÑÑÑ ÑÑÑÑогаÑной паÑÑ
ret += str.charAt(idx + 1);
}
return ret;
}
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4