如果我有这个非常简单的数组:
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/"]
先谢谢了。有一个方法可以完成上述操作吗?
答案 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' ]