从数组元素中删除重复的单词

3

我有一个关于替换数组中单词的小问题。好的,这是我的数组:

var words = ['Category One Category One Clothes', 'Category One Category One Jackets'];

我想要最终的结果像这样:

var result = ['Category One Clothes', 'Category One Jackets'];

尝试使用此方法,但不起作用 使用JavaScript删除重复字符串


我可以推荐使用lodash/uniq吗?https://lodash.com/docs/4.17.4#uniq 没有必要重写它,只需重复使用即可。 - Dayan Moreno Leon
@DayanMorenoLeon uniq 可以从 数组 中删除重复元素,但不能用于字符串本身。 - Tushar
你的示例只重复前两个单词 - 你想删除其中重复的单词吗?输入数组项总是以重复的单词开头吗,还是有些已经是 'Category One Jackets' 之类的短语了? - nnnnnn
嘿,nnnnnn,是的,数组是自动生成的。 - Opsional
我的错,我没有仔细阅读问题。然而,通过一点分割魔法,uniq 仍然可以使用 uniq(str.split(' ')).join(' '); - Dayan Moreno Leon
2个回答

7
对于给定的输入,这个应该可以工作。
words.map(w => w.replace(/([\w\s]+)\1+/, '$1'))

var words = ['Category One Category One Clothes', 'Category One Category One Jackets'];
var result = words.map(w => w.replace(/([\w\s]+)\1+/, '$1'));
console.log(result);

正则表达式 ([\w\s]+) 将匹配单词/空格,\1+ 将再次匹配相同的单词。

@Opsional 欢迎。请测试所有场景。对于某些输入,可能无法正常工作。 - Tushar

1
你可以使用这个。希望它对你有用。
function unique(array) {
    return $.grep(array, function (el, index) {
        return index == $.inArray(el, array);
    });
}
var words = ['Category One Category One Clothes', 'Category One Category One Jackets'];
var result = [];
for (i = 0; i < words.length; i++) {
    arr = unique(words[i].split(' '));
    result[i] = arr.join(' ');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接