【问题标题】:jquery: determine if a string contains characters of an arrayjquery:确定字符串是否包含数组的字符
【发布时间】:2016-11-10 15:32:16
【问题描述】:

我有以下代码:

var specialchars = [246,214,228,196,252,220,223]; // holds german umlauts + ß
var foo = "abcdefä41hl";

检测 foo 是否包含数组中字符的 ascii 代码的最佳做法是什么?在这种情况下,它会返回 true,因为它包含“ä”(ascii 代码 228)。

谢谢

【问题讨论】:

  • JavaScript 使用 Unicode 的 UTF-16 编码,而不是 ASCII。例如,ß 最好写成“ß”或"\u00df"。 (ß 甚至不是 ASCII 字符。)那么,为什么不将 specialchars 设为字符串数组呢?

标签: jquery arrays string


【解决方案1】:

您可以通过以下方式检测到,

var specialchars = [246,214,228,196,252,220,223];
var foo = "abcdefä41hl";
var isExist = !!([...foo].find(itm => specialchars.includes(itm.charCodeAt())));

console.log(isExist); // true

或者您可以按照评论中的建议使用Array.prototype.some 而不是find

var isExist = [...foo].some(itm => specialchars.includes(itm.charCodeAt()));

【讨论】:

  • 您可能需要Array#some 而不是find,以便它返回一个布尔值。
  • @4castle 更新!感谢您的提醒。
  • 很抱歉打扰您,但是 [...foo] 是正确的语法吗?它不工作..:/你能更新解决方案吗?
  • @Fuxi 什么都不会打扰我。 :-) 你在使用 ES6 吗?那个被称为扩展运算符。
  • @Fuxi 如果[...foo] 不起作用,您也可以为该部分执行foo.split('')
【解决方案2】:

很容易:

foo.split("").filter(c => specialchars.indexOf(c.charCodeAt()) != -1).length != 0

它将字符串拆分为一个字符数组,只保留特殊字符列表中存在的字符,并检查是否有剩余。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2013-06-25
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多