📌  相关文章
📜  JavaScript |从数组中获取所有非唯一值(1)

📅  最后修改于: 2023-12-03 15:31:39.431000             🧑  作者: Mango

JavaScript | 从数组中获取所有非唯一值

在 JavaScript 中,我们可以轻松地从一个数组中获取唯一值。但有时候,我们需要获取所有非唯一值,也就是出现过一次以上的元素。那么该如何实现呢?

方法一:使用 for 循环和 indexOf 函数

我们可以使用 for 循环来遍历数组中的每一个元素,并使用 indexOf 函数来判断元素是否已经在数组中出现过一次以上。如果已经出现过,那么我们将其添加到一个新的数组中。

function getNonUniqueValues(arr){
  var result = [];
  for(var i=0; i < arr.length; i++){
    if(arr.indexOf(arr[i], i+1) != -1 && result.indexOf(arr[i]) == -1){
      result.push(arr[i]);
    }
  }
  return result;
}

在上述代码中,我们首先创建了一个名为 result 的新数组。然后我们使用 for 循环来遍历原数组中的每一个元素。在循环体中,我们使用 indexOf 函数来查找当前元素在原数组中的后面是否还有一次及以上的出现。如果找到了,那么我们就判断这个元素是否已经在 result 数组中出现过。如果没有,那么我们就将其添加到 result 数组中。

方法二:使用 filter 和 includes 函数

除了 for 循环和 indexOf 函数之外,我们还可以使用 filter 函数和 includes 函数来实现同样的功能。

function getNonUniqueValues(arr){
  return arr.filter(function(value, index, self){
    return self.indexOf(value) !== index && !self.slice(index+1).includes(value);
  });
}

在上述代码中,我们使用 filter 函数来过滤出数组中的所有非唯一值。在 filter 的回调函数中,我们首先使用 indexOf 函数来查找当前元素在原数组中的第一个出现位置。如果这个位置不等于当前的索引位置,那么说明这个元素在原数组中出现过一次以上。然后我们再使用 slice 函数来获取当前元素在原数组中的后面的所有元素,并使用 includes 函数来查找这个元素是否在这个后面的元素中出现过。如果没有,那么就说明这个元素是非唯一值。最后将这个元素添加到结果数组中即可。

总结

以上两种方法都可以帮助我们从一个数组中获取所有非唯一值。使用 for 循环和 indexOf 函数的方法较为简单,但是在数组比较大时可能会较为耗时。使用 filter 和 includes 函数的方法则较为快速,但是需要比较多的 JavaScript 知识储备。我们可以酌情选择适合自己的方法。