删除重复项后,查找数组的长度

时间:2018-06-13 08:41:02

标签: javascript arrays

删除重复项后,找到数组的长度。我正在使用下面的代码,但它返回0作为数组的长度:

var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = [];
$(function() {
  $.each(mydata, function(i, el) {
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
  });
})
console.log(uniqueNames.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

总长度

13

预期输出

9

3 个答案:

答案 0 :(得分:4)

问题是因为您在jQuery document.ready事件处理程序之外调用console.log(),因此您在之前记录length &# 39;已经去掉了阵列。将length检查放在处理程序中:

&#13;
&#13;
var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = [];
$(function() {
  $.each(mydata, function(i, el) {
    if ($.inArray(el, uniqueNames) === -1) uniqueNames.push(el);
  });

  console.log(uniqueNames.length);
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

话虽如此,你根本不需要jQuery。 jQuery旨在用作DOM操作框架。原生JS方法对于使用数组更有效:

&#13;
&#13;
var mydata = ["1", "2", "3", "3", "4", "5", "5", "6", "7", "7", "8", "9", "9"];

var uniqueNames = mydata.filter((value, index, arr) => {
  return arr.indexOf(value) === index; 
});

console.log(uniqueNames.length);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

使用现代JS,只需使用集合即可完成复制。

例如..

const myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];

const uniqueData = Array.from(new Set(myData));

console.log(myData.join(", "));
console.log(uniqueData.join(", "));
console.log(`length = ${uniqueData.length}`);

答案 2 :(得分:0)

您可以检查元素的lastIndexOf(),以便最后一个索引与当前索引匹配。如果是这样,请在uniqueNames数组中推送该元素。然后,您还可以使用uniqueNames.length

获取长度

var myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];
var uniqueNames = [];
myData.forEach((num, index)=>{
  if(myData.lastIndexOf(num) === index){
    uniqueNames.push(num);
  }
});
console.log(uniqueNames);
console.log('length is '+ uniqueNames.length);

使用过滤器()

var myData = ["1","2","3","3","4","5","5","6","7","7","8","9","9"];
var uniqueNames =  myData.filter((num, index)=> myData.lastIndexOf(num) === index);
console.log(uniqueNames);
console.log('length is '+ uniqueNames.length);