验证内容后,获取数组中的所有唯一值

时间:2020-09-04 14:48:59

标签: javascript arrays

如果我有这个非常简单的数组:

let result = ["doc1.rtf","doc2.rtf","test/doc4.rtf","test/doc4.rtf","test/doc6.rtf"]

我可以通过运行类似的东西来找到唯一的出现。

let unique = [...new Set(result)]; 

谁会还给我:

["doc1.rtf","doc2.rtf","test/doc4.rtf","test/doc6.rtf"]

但是我想要做的是在过滤掉任何内容的内容之前,搜索数组中唯一的内容,直到前导斜线为止。因此,在我过滤掉重复的test/

之前,数组如下所示
let filtered = ["doc1.rtf","doc2.rtf","test/","test/","test/"]

先谢谢了。有一个方法可以完成上述操作吗?

3 个答案:

答案 0 :(得分:2)

我希望我正确理解了这个问题,但是您可以试用map。例如:

result.map(r => r.split('/')[0])
# ["doc1.rtf", "doc2.rtf", "test", "test", "test"]

result.map(r => r.replace(/\/.*/, '/'))
# ["doc1.rtf", "doc2.rtf", "test/", "test/", "test/"]

可能会满足您的需求。

答案 1 :(得分:1)

要删除所有不超过斜杠的内容,可以将 mounted() { document.addEventListener('keydown', (e) => { if(e.key === 'ArrowUp') { e.preventDefault() this.goUp() } else if(e.key === 'ArrowDown') { e.preventDefault() this.goDown() } }) }, map一起使用:

split

比寻找独特的元素

let result = ["doc1.rtf","doc2.rtf","test/doc4.rtf","test/doc4.rtf","test/doc6.rtf"];
result.map(i => i.split('/')[0]);
// ["doc1.rtf", "doc2.rtf", "test", "test", "test"]

答案 2 :(得分:0)

您可以通过将数组的每个项目映射到解析器,然后使用Set作为成员资格来一次完成过滤。

const uniqMap = resolver => function uniqMapping(array) {
  const existing = new Set(),
    result = []
  for (let i = 0; i < array.length; i++) {
    const item = array[i]
    const resolvedItem = resolver(item)
    if (existing.has(resolvedItem)) {
      continue
    }
    existing.add(resolvedItem)
    result.push(resolvedItem)
  }
  return result
}

let data = ["doc1.rtf","doc2.rtf","test/doc4.rtf","test/doc4.rtf","test/doc6.rtf"]

console.log(
  uniqMap(item => item.split('/')[0])(data),
) // [ 'doc1.rtf', 'doc2.rtf', 'test' ]

相关问题