【问题标题】:Get unique values of a Javascript array获取 Javascript 数组的唯一值
【发布时间】:2020-02-10 02:10:53
【问题描述】:

我正在尝试在 JavaScript 中编写一个函数来获取数组的唯一值,但我的代码无法正常工作。我知道还有其他更好更简单的方法可以做到这一点,但我不明白为什么我的代码不起作用,我想了解它。

函数有两个for循环,如果外索引和内索引不同且这些索引位置的值相同,则将内索引的位置推到另一个数组中。当内部for循环结束时,在另一个数组中注释的索引在原始数组中被替换为空值,以便稍后删除。

输入为:1 2 2 3 3 3 4 4 4 4 5 5 5 5 5

但输出是:1 2 null null null null 4 4 4 4 5 5 5 5 5

我不知道出了什么问题,有人可以帮我吗?

function uniqueArrayValues(vector) {
  var indexRepeated = [];
  for (let i in vector) {
    for (let j in vector) {
      if (vector[i] == vector[j] && i != j && j != null && i != null && i < j ) {
        indexRepeated.push(j);
      }
    }
    for (let i in indexRepeated) {
      if (vector[indexRepeated[i]] != null) {
        vector.splice(vector[indexRepeated[i]], 1, null);
      }
    }
  }
}

【问题讨论】:

    标签: javascript arrays unique-values


    【解决方案1】:

    你快到了。

    splice() 方法的第一个参数是开始索引,即开始更改数组的索引。

    在您的代码中,vector.splice(vector[indexRepeated[i]], 1, null); 您将在vector 数组中的该索引处传递,而不是该索引。这就是意外输出的原因。

    只需将该行更改为 vector.splice(indexRepeated[i], 1, null); 并过滤 null 值。

    实例:

    function uniqueArrayValues(vector) {
      var indexRepeated = [];
      for (let i in vector) {
        for (let j in vector) {
          if (vector[i] == vector[j] && i != j && j != null && i != null && i < j) {
            indexRepeated.push(j);
          }
        }
    
      
        for (let i in indexRepeated) {
          if (vector[indexRepeated[i]] != null) {
            vector.splice(indexRepeated[i], 1, null);
          }
        }
      }
     
      return vector.filter(value => value !== null); // Can also use vector.filter(value => value);
    }
    
    var arr = [1,2,2,3,3,3,4,4,4,4,5,5,5,5,5];
    
    console.log(uniqueArrayValues(arr));

    这里有一些其他更简单的方法可以从数组中获取唯一值。

    1) 使用filter()

    var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
    
    var unique = arr.filter((value, index, arr) => index === arr.indexOf(value));
    
    console.log(unique);

    2) 使用Set()

    var arr = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5];
    
    var unique = [...new Set(arr)];
    
    console.log(unique);

    【讨论】:

      【解决方案2】:

      如你所想,只需像这样定义函数;

      function uniqueArrayValues(vector) {
        //var indexRepeated = [];
        for (let i in vector) {
          for (let j in vector) {
            if (vector[i] == vector[j] && i < j ) {
              vector[j]=null;
            }
          }
      
        }
      }
      

      indexRepeated 的循环是多余的。 顺便把这些代码vector.splice(vector[indexRepeated[i]], 1, null);改成vector.splice(indexRepeated[i], 1, null);也行。

      【讨论】:

        【解决方案3】:

        从数组中获取所有唯一值的一种简单方法是将数组转换为集合。

        let arr = [1,2,2,3,3,3,4,4,4,5,5,5,5,5];
        
        let uniqueArr = new Set(arr);
        
        console.log(uniqueArr); ///Set { 1, 2, 3, 4, 5 }
        

        【讨论】:

        • Array.from(new Set([1,1,2,3]))
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 2020-09-06
        • 2020-07-14
        • 2019-01-03
        • 1970-01-01
        • 2022-12-22
        • 1970-01-01
        相关资源
        最近更新 更多