【问题标题】:Remove shorter items in array that are already present删除数组中已经存在的较短项目
【发布时间】:2021-09-16 10:03:52
【问题描述】:

我正在尝试从数组中删除已经存在于较长项目中的项目。 例如,如果我有两个项目“知识库”和“基础”,我想删除“基础”,如果我多次进行知识管理,我想保留所有项目,除非有一个项目包含这两个词,但它更长例如“知识管理书”。

按长度对项目进行排序很容易,但我不知道如何检查例如“基础”是否已经长期存在(“知识库”)

所以在下面的示例中,所需的解决方案是:

const items = ['Knowledge base', 'knowledge management', 'knowledge management']

const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management']

const newItems = items.sort((a,b) => b.length - a.length)

console.log(newItems)

【问题讨论】:

  • 为什么'knowledge management' 在输出中出现两次?

标签: javascript arrays sorting


【解决方案1】:

您可以使用Array.filter()Array.some() 来过滤包含在其他项目中的任何项目。

const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management'];

const result = items.filter(item => !items.some(it => it !== item && it.includes(item)));

console.log('Result:', result);

【讨论】:

  • 这是正确的答案,而且比我用 for 循环的想法要好。
【解决方案2】:

通过一些过滤并通过包含方法进行验证

const items = ['Knowledge base', 'base', 'management', 'knowledge management', 'Knowledge', 'knowledge', 'knowledge management'];

const newItems = items.filter((item) => {
      return !items.some((iChecker) => {
           return iChecker !== item && iChecker.includes(item)
         }
      ) 
  }
);

console.log( { newItems } );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多