从字符串中删除相同的元素

时间:2017-07-17 19:55:49

标签: javascript arrays string

得到字符串,需要从那里删除相同的单词。

这是我的代码。我试图将字符串拆分为数组然后排序但它不起作用。它甚至没有通过我的if。我想听听你的意见和工作代码:)

  var str = "I wont go anywhere as soon as I wont go there";
    var array = str.split(" ");
    document.getElementsByTagName('p')[0].innerHTML = str;
    document.getElementsByTagName('p')[1].innerHTML = array;
    document.getElementsByTagName('button')[0].onclick = function () {
            for (var i = 0; i < array.length; i++) {
                if (array[i] == array[i + 1]) {
                    array.splice(i, 1);
                }
            }
            document.getElementsByTagName('p')[2].innerHTML = array;
        }

4 个答案:

答案 0 :(得分:1)

如果你喜欢单行试试这个

var reducedString  = array.reduce(function(out, s) {
    return out.indexOf(s) == -1 ? out + ' ' + s : out;
},'').substring(1);

或在ES6中

var reducedString = array.reduce( (out, s) => out.indexOf(s) == -1 ? out + ' ' + s : out);

答案 1 :(得分:0)

分割完遗产后,您可以使用带有扩展语法的ES6 Set

const str = "I wont go anywhere as soon as I wont go there";
const unique = [...new Set(str.split(' '))].join(' ');

console.log(unique);

在ES5中,您可以将Array#reduce与字典对象一起使用。

var str = "I wont go anywhere as soon as I wont go there";

var dict = Object.create(null); // creates an empty object, without inherited properties and methods
var unique = str.split(' ').reduce(function(arr, w) {
  if(!dict[w]) {
    arr.push(w);
    dict[w] = true;
  }
  
  return arr;
}, []).join(' ');

console.log(unique);

答案 2 :(得分:0)

您只需替换您要搜索的子字符串

即可
var ret = "data-123".replace('data-','');
console.log(ret);

答案 3 :(得分:0)

您的问题是您不会检查每个数组元素与其他每个数组元素。

您的代码:

for (var i = 0; i < array.length; i++) {
            if (array[i] == array[i + 1]) {
                array.splice(i, 1);
            }
        }

只是按顺序检查数组元素。

尝试:

for (var i = 0; i < array.length; i++) {
     for(var j = 0; j < array.length; j++){
          if (array[i] == array[j] && i != j) {
                array.splice(i, 1);
            }
     }
}