我被一个JavaScript函数卡住了,这个函数应该计算数组中所有唯一的项



我想创建一个函数,计算数组中所有唯一的项,但不知怎么的,我没有得到任何输出。这是我的阵法!let arr = ["hi", "hello", "hi"];

这是我迄今为止写的代码:

function countUnique(arr) {
var counts = {};
for (var i = 0; i < arr.length; i++) {
counts[arr[i]] = 1 + (counts[arr[i]] || 0);
}
countUnique(arr);
}
console.log(countUnique(arr));

您对值的计数是正确的,但随后您递归调用此方法countUnique(arr);,导致调用堆栈超出的错误。所以只需移除方法countUnique(arr);的递归调用并返回计数值counts:

function countUnique(arr) {
var counts = {};
for (var i = 0; i < arr.length; i++) {
counts[arr[i]] = 1 + (counts[arr[i]] || 0);
}
return counts;
}
let arr = ["hi", "hello", "hi"];
console.log(countUnique(arr));

JavaScript引擎限制了最大递归深度。我们可以相信它是10000,有些发动机允许更多。

您可以获取Set并返回size

const countUnique = array => new Set(array).size;
console.log(countUnique(["hi", "hello", "hi"]));

let arr = ["hi", "hello", "hi"];
function countUnique(arr) {
var counts = {};
for (var i = 0; i < arr.length; i++) {
if(arr[i] in counts) {
counts[arr[i]]++;
} else {
counts[arr[i]] = 1;
}
}
return Object.keys(counts).length;
}
console.log(countUnique(arr));

最新更新