【问题标题】:Remove duplicate substring in an array删除数组中的重复子字符串
【发布时间】:2021-03-22 07:22:18
【问题描述】:

我有一个如下的数组:

[
  'author/2020/01/01/all_authors_000.csv',
  'book/2020/01/01/all_books_000.csv',
  'book/2020/01/01/all_books_001.csv',
  'book/2020/01/01/all_books_002.csv',
  'others/2020/01/01/other_stuff.csv',
]

如您所见,有三个以单词book 开头的项目。我想删除除一个以外的所有内容,所以我最终得到如下内容:

[
  'author/2020/01/01/all_authors_000.csv',
  'book/2020/01/01/all_books_000.csv',
  'others/2020/01/01/other_stuff.csv',
]

我怎样才能做到这一点?

【问题讨论】:

  • 从技术上讲,您的问题是 Remove duplicate substring in an array 并且没有重复。
  • 子字符串book/被复制
  • 标准是什么。 book/2020book/2021 是否也重复?
  • 不,只是book这个词。

标签: javascript


【解决方案1】:

这是工作示例:

var array = [
   "author/2020/01/01/all_authors_000.csv",
   "book/2020/01/01/all_books_000.csv",
   "book/2020/01/01/all_books_001.csv",
   "book/2020/01/01/all_books_002.csv",
   "others/2020/01/01/other_stuff.csv",
];

var filteredArray = [];
var previous = "";

for (let i of array) {
   if (i.substr(0, i.indexOf("/")) != previous) {
      filteredArray.push(i);
      previous = i.substr(0, i.indexOf("/"));
   }
}

每次循环,"/2020" 之前的值都存储在previous 变量中,if 语句检查该值是否与前一个循环中的值相同。如果没有,它会将其推送到filteredArray

因此filteredArray 是没有重复的数组。

【讨论】:

  • 谢谢。不知道lodash是否也能做到这一点?
  • @blankface 我自己没有使用 lodash 的经验,但是看看 this
【解决方案2】:

这是另一种方法。基本上是一个接收数组的函数和一个识别重复项的标准(在您的情况下为book)。除了第一个之外,所有这些重复项都将被删除。

const array = [
  "author/2020/01/01/all_authors_000.csv",
  "book/2020/01/01/all_books_000.csv",
  "book/2020/01/01/all_books_001.csv",
  "book/2020/01/01/all_books_002.csv",
  "others/2020/01/01/other_stuff.csv",
];

const removeDuplicates = (array, criteria) => {
  return array.filter(
    (path) =>
      ![...array.filter((path) => path.includes(criteria)).splice(1)].includes(
        path
      )
  );
};

console.log(removeDuplicates(array, "book"));

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2012-05-09
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多