如何反转 `String.fromCodePoint`,即将字符串转换为代码点数组?

How do I reverse `String.fromCodePoint`, i.e. convert a string to an array of code points?

String.fromCodePoint(...[127482, 127480]) 给我一面美国国旗 ()。

如何将标志变回 [127482, 127480]

您正在寻找 codePointAt,也许使用传播(等)转换回数组,然后映射每个数组。

console.log(theString.codePointAt(0)); // 127482
console.log(theString.codePointAt(2)); // 127480
// Note −−−−−−−−−−−−−−−−−−−−−−−−−−^
// It's 2 because the first code point in the string occupies two code *units*

const array = [...theString].map(s => s.codePointAt(0));
console.log(array); // [127482, 127480]

或跳过中间步骤 via Array.from 及其映射回调:

const array = Array.from(theString, s => s.codePointAt(0));
console.log(array); // [127482, 127480]

示例:

const theString = String.fromCodePoint(...[127482, 127480]);

console.log(theString.codePointAt(0)); // 127482
console.log(theString.codePointAt(2)); // 127480

const array = [...theString].map(s => s.codePointAt(0));
console.log(array);  // [127482, 127480]

const array2 = Array.from(theString, s => s.codePointAt(0));
console.log(array2); // [127482, 127480]

Spread 和 Array.from 都通过使用字符串 iterator 来工作,它按代码点工作,而不是像大多数字符串方法那样的代码单元。