【问题标题】:Comparing values in one array with the values in a second with Lodash使用 Lodash 将一个数组中的值与一秒钟内的值进行比较
【发布时间】:2026-02-01 11:20:05
【问题描述】:

我有两个看起来像这样的数组:

const classes = ["story-body-text", "story-content", "leading__100"];
const prefixes = ["alignment__", "font__", "leading__", "size__", "tracking__", "features__"];

我需要遍历 classes 数组并从 prefixes 数组中删除任何不以值开头的值。在这个特定的实例中,它应该返回一个新数组,其值为:

return ["leading__100"];

建议?

【问题讨论】:

  • 你能想出解决这个问题的方法吗?假设您没有使用 Lodash,并且必须为它编写纯 JavaScript。您能否创建一个新的输出数组,然后遍历您的 classes 数组,并为该数组中的每个元素循环遍历所有 prefixes 并查看是否匹配,如果匹配,则推送当前的 classes 元素到输出数组并跳出那个内部循环?
  • 嘿,迈克尔。我看到这是合乎逻辑的方法,但我担心为此循环两个数组。我想没有办法解决这个问题吧?
  • 是的,如果您正在检查完整的字符串匹配,您可以使用 prefixes 数组中的每个值创建一个对象(在这种情况下不会称为 prefixes,当然),然后在您的外循环中,您只需检查该对象中当前classes 值是否存在。这将避免嵌套循环,并且在有很多元素的情况下可能会更快。但是使用前缀匹配,您所做的任何事情都会归结为嵌套循环(以一种或另一种形式)。
  • 对于 Lodash 解决方案,您可以查看 _.filter() 以获取 classes 数组上的外部循环。向它传递一个检查每个前缀的谓词函数。该谓词函数可以在prefixes 数组上使用_.some() 并检查每个元素上的string.startsWith()。 (或者为了更广泛的浏览器支持,使用在MDN .startsWith() documentation 中找到的等效代码。但是如果速度可能是一个问题,两个嵌套的for 循环将获胜。

标签: javascript lodash


【解决方案1】:
_.filter(classes, cls => _.some(prefixes, p => _.startsWith(cls, p)))

【讨论】:

    最近更新 更多