删除重复项后,找到数组的长度。我正在使用下面的代码,但它返回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
答案 0 :(得分:4)
问题是因为您在jQuery document.ready事件处理程序之外调用console.log()
,因此您在之前记录length
&# 39;已经去掉了阵列。将length
检查放在处理程序中:
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;
话虽如此,你根本不需要jQuery。 jQuery旨在用作DOM操作框架。原生JS方法对于使用数组更有效:
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;
答案 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);