查找唯一文件名的计数包含在一个简单的javascript数组中。
我有一个javascript数组,它通过
组合了两个数组var total_dl = prev_dl.concat(new_dl).sort();
一个是来自php变量的json_encode(),另一个来自在表单上选择的复选框值。这会输出一个简单的文件名列表,即
cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg
然后我可以使用
将其细化为不同值的数组var unique_dl = total_dl.filter((value,pos) => {return total_dl.indexOf(value) == pos;} );
输出
cat.jpg, dog.jpg, elephant.jpg, lion.jpg
我现在只需要输出这里包含多少个唯一/不同文件名的计数,即4.首先想到的是使用长度
var count_unique = unique_dl.length;
似乎给出了prev_dl + 1的值,对于new_dl组成的内容没有变化。另一个尝试
var count_unique = unique_dl.filter(function(val, i, arr) {
return arr.indexOf(val) === i;
}).length;
也失败了(我在这里错误格式化了吗?)。
非常欢迎任何指点/指导者,谢谢。
答案 0 :(得分:1)
您可以使用Set对象。它需要一个可迭代的并返回一个包含唯一项的集合。
const arr = 'cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg'.split(', ');
const unique = new Set(arr);
console.log(unique.size);
如果您想将其转换回数组,可以使用Array.from:
const uniqueArr = Array.from(unique);
console.log(uniqueArr);
const arr = 'cat.jpg, dog.jpg, elephant.jpg, cat.jpg, lion.jpg, dog.jpg'.split(', ');
const unique = new Set(arr);
console.log('Set size', unique.size);
const uniqueArr = Array.from(unique);
console.log('Unique array', uniqueArr);

答案 1 :(得分:0)
unique_dl.length解决方案适合我。 建立unique_dl你需要O(n ^ 2)时间,所以它比:
慢function count_unique(in_array) {
if(in_array.length == 0)
return 0;
var sorted = input_array.sort();
var unique_count = 1;
for(int i = 1; i < sorted.length; ++i)
if(sorted[i - 1] != sorted[i])
++unique_count;
return unique_count;
}
因为它只使用O(n log(n))时间
答案 2 :(得分:0)
我测试了你的例子,正如@phil所说,你提供的数据结果是4。
var total_dl = [
'cat.jpg', 'dog.jpg', 'elephant.jpg', 'cat.jpg',
'lion.jpg', 'dog.jpg'
]
var unique_dl = total_dl.filter((value,pos) => {return total_dl.indexOf(value) == pos;} );
console.log(unique_dl)
var count_unique = unique_dl.length;
console.log(count_unique)