Javascript 删除不带正则表达式或筛选器的数组中的重复项

Javascript 删除不带正则表达式或筛选器的数组中的重复项,javascript,Javascript,我在这个问题上已经被难住了几个小时,现在没有任何进展。我觉得这应该很简单。我正在尝试删除字符串中的重复字符,而不使用Filter或Reg-ex等方法 这是我目前的代码: var duplicate = function(string) { var newString = string.split(""); var finalArrayWithNoDuplicates = [] for (var i = 0; i < newString.length; i++){ fo

我在这个问题上已经被难住了几个小时,现在没有任何进展。我觉得这应该很简单。我正在尝试删除字符串中的重复字符,而不使用Filter或Reg-ex等方法

这是我目前的代码:

var duplicate = function(string) {
  var newString = string.split("");
  var finalArrayWithNoDuplicates = []

  for (var i = 0; i < newString.length; i++){
    for (var=0; j < newString.length; i++){
      while(newString[i])
        if (newString[i] !== newString[j]){

        }
    }
  }

  return finalArrayWithNoDuplicates.join("");

};
var duplicate=函数(字符串){
var newString=string.split(“”);
var finalArrayWithNoDuplicates=[]
对于(变量i=0;i
我可以一次过滤一个字母,但随着我在while语句中的处理,我会添加最初过滤掉的字母


这个算法的所有算法教程都是我一直在寻找的Java语言。有没有办法只使用a for和while循环来实现这一点?

这里有一个稍微修改过的函数版本,它使用一个对象来跟踪已经遇到的字母:

var duplicate = function(string) {
  var finalArrayWithNoDuplicates = [];
  var seen = {};
  for (var i = 0; i < string.length; i++) {
    if (!seen[string[i]]) {
      finalArrayWithNoDuplicates.push(string[i]);
      seen[string[i]] = 1;
    }
  }
  return finalArrayWithNoDuplicates.join("");
};
var duplicate=函数(字符串){
var FinalarRayWithNodeDuplicates=[];
var-seen={};
对于(变量i=0;i
建议的代码有几处错误:

  • 它有严重错误(内部循环写错了)
  • 您根本不需要涉及数组,字符串就可以了
  • “if char!==other char”检查永远不会提供足够的信息来执行操作
这里有一个使用for循环的替代版本和相同的基本思想:

function deduplicate(str) {
    var result = "";
    for (var i = 0; i < str.length; ++i) {
        var found = false;
        for (var j = 0; j < i; ++j) {
            if (str[i] == str[j]) {
                found = true;
                break;
            }
        }
        if (!found) result += str[i];
    }

    return result;
}
功能重复数据消除(str){
var结果=”;
对于(变量i=0;i
将输入字符串中的每个字符
str[i]
与前面的所有字符
str[j]
进行比较(与后面的字符进行比较没有意义,因为我们将在轮到它们时处理它们)。如果该字符不等于它前面的任何字符,那么我们知道它是第一个出现并包含在结果中的字符

请注意,该算法具有O(n²)性能,与其他可能的方法相比,该性能非常差。它的主要卖点在于它直截了当,一切都发生在“你的眼前”

  • 不需要两个嵌套的for循环
  • 也不需要“while”循环
  • 在下面的代码行中有两个错误:
    for(var=0;j
    第一个错误是
    var=0
    (编译错误),第二个错误是当您增加
    i
    而不是
    j
  • 只需将唯一元素(不会出现两次)添加到
    finalArrayWithNoDuplicates

  • 详情如下:

    var duplicate = function(newString) {
    
      var finalArrayWithNoDuplicates = []
      var x = 0;
      for (var i = 0; i < newString.length; i++){
            // if the char appears in another index 
            // or if it's already in the result - don't add it
        if (newString.lastIndexOf(newString[i]) !== i || finalArrayWithNoDuplicates.indexOf(newString[i]) > -1){
                continue;
        }
        else{
          finalArrayWithNoDuplicates[x++] = newString[i];
        }
    
      }
    
      return finalArrayWithNoDuplicates.join("");
    
    };
    
    var arr = [1,2,3,4,5,4,5,6,7];
    alert(duplicate(arr));
    
    var duplicate=函数(newString){
    var finalArrayWithNoDuplicates=[]
    var x=0;
    对于(变量i=0;i-1){
    继续;
    }
    否则{
    finalArrayWithNoDuplicates[x++]=newString[i];
    }
    }
    返回finalArrayWithNoDuplicates.join(“”);
    };
    var arr=[1,2,3,4,5,4,5,6,7];
    警报(重复(arr));
    
    输出:

    1234567


    那么您是在尝试从字符串中删除重复的字符,还是实际上在尝试删除重复的数组值?