我想提醒字符串的每个字母,但我不确定如何执行此操作。
所以,如果我有:
var str = 'This is my string';
我希望能够分别提醒T
、h
、i
、s
等。这只是我正在研究的一个想法的开始,但我需要知道如何分别处理每个字母。
我想我可能需要在测试字符串的长度后使用 split 函数。
我怎样才能做到这一点?
我想提醒字符串的每个字母,但我不确定如何执行此操作。
所以,如果我有:
var str = 'This is my string';
我希望能够分别提醒T
、h
、i
、s
等。这只是我正在研究的一个想法的开始,但我需要知道如何分别处理每个字母。
我想我可能需要在测试字符串的长度后使用 split 函数。
我怎样才能做到这一点?
这可能不仅仅是解决了。只想提供另一个简单的解决方案:
var text = 'uololooo';
// With ES6
[...text].forEach(c => console.log(c))
// With the `of` operator
for (const c of text) {
console.log(c)
}
// With ES5
for (var x = 0, c=''; c = text.charAt(x); x++) {
console.log(c);
}
// ES5 without the for loop:
text.split('').forEach(function(c) {
console.log(c);
});
https://jsperf.com/str-for-in-of-foreach-map-2
经典,迄今为止性能最高的一款。如果您打算在性能关键算法中使用它,或者它需要与浏览器版本的最大兼容性,则应该使用它。
for (var i = 0; i < str.length; i++) {
console.info(str[i]);
}
for...of是新的ES6迭代器。大多数现代浏览器都支持。它在视觉上更具吸引力,并且不太容易出现打字错误。如果您打算在生产应用程序中使用这个,您可能应该使用像Babel这样的转译器。
let result = '';
for (let letter of str) {
result += letter;
}
功能方法。Airbnb 批准。这样做的最大缺点是split()
, 它会创建一个新数组来存储字符串的每个单独的字母。
为什么?这强制执行我们的不可变规则。处理返回值的纯函数比副作用更容易推理。
// ES6 version.
let result = '';
str.split('').forEach(letter => {
result += letter;
});
或者
var result = '';
str.split('').forEach(function(letter) {
result += letter;
});
以下是我不喜欢的。
与 for...of 不同,您得到的是字母索引而不是字母。它的表现非常糟糕。
var result = '';
for (var letterIndex in str) {
result += str[letterIndex];
}
函数方法,这很好。但是,地图并不打算用于此目的。当需要更改数组内的值时应该使用它,但事实并非如此。
// ES6 version.
var result = '';
str.split('').map(letter => {
result += letter;
});
或者
let result = '';
str.split('').map(function(letter) {
result += letter;
});
纯 javascript 中的一种可能解决方案:
for (var x = 0; x < str.length; x++)
{
var c = str.charAt(x);
alert(c);
}
这里的大多数(如果不是全部)答案都是错误的,因为只要字符串中有 Unicode BMP(基本多语言平面)之外的字符,它们就会中断。这意味着所有表情符号都将被破坏。
JavaScript对所有字符串使用UTF- 16 Unicode。在 UTF-16 中,超出 BMP 的字符由两部分组成,称为“代理 对”,此处的大多数答案将单独处理此类对的每个部分,而不是将其作为单个字符处理。
至少自 2016 年以来,现代 JavaScript 的一种方法是使用新的String iterator。这是(几乎)直接来自 MDN 的示例:
var string = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A';
for (var v of string) {
alert(v);
}
// "A"
// "\uD835\uDC68"
// "B"
// "\uD835\uDC69"
// "C"
// "\uD835\uDC6A"