JavaScript 的 some 方法

假如我有一段字符串,我需要判断它是否以 one 开头的,可以这样写

if (str.startsWith('one'))

假如我还需要判断是否以 two 开头:

if (str.startsWith('one') || str.startsWith('two'))

如果后面还需要继续加,岂不是要写很多个 startsWith ?

更好的做法是使用 some() 方法。

const prefixes = ['one', 'two', 'three'];

const str = 'three body';

if (prefixes.some(prefix => str.startsWith(prefix))) {
console.log(str)
} else {
//
}

此处定义一个数组,用 some() 方法遍历数组中的每一个元素。如果存在任何一个前缀与字符串匹配,则返回 true,否则返回 false

上面的代码,最后会打印出 str 的值,如果我还想获得 prefix 的值,此时是 three,可以这么写

const prefixes = ['one', 'two', 'three'];

const str = 'one three body';

prefixes.some(prefix => {
str.startsWith(prefix) ?
console.log(`${prefix} match ⭐️⭐️⭐️`) :
console.log(prefix);
})
// ? : 是 if else 的简短写法

此时输出的结果是

one match ⭐️⭐️⭐️
two
three

可以发现,明明数组中第一个元素已经匹配到了,但是后面的元素还是继续判断。如果想要匹配到之后,后面的不判断,需要加一个 return。

const prefixes = ['one', 'two', 'three'];

const str = 'one three body';

prefixes.some(prefix => {
if (str.startsWith(prefix)){
console.log(`${prefix} match ⭐️⭐️⭐️`);
return true;
}else{
console.log(prefix);
}
})

测试的时候我使用这个网站:compile nodejs online (rextester.com)