我正在尝试解决binarysearch.io上的一些算法问题,并遇到了这个问题:
我使用JavaScript解决了它,代码如下:
class Solution {
solve(nums) {
const Hash = {};
const Cache = {};
for (let val of nums) {
if (!Hash[val]) {
Hash[val] = 0;
}
Hash[val]++; //implicit else
}
const result = Object.values(Hash).reduce((accum, curr) => {
if (accum && Cache[curr] !== 'unique') {
Cache[curr] = 'unique';
return true
}
return false;
}, true);
return result;
}
}
然而,当我尝试使用TypeScript解决这个问题时(我对它还比较陌生),我遇到了编译错误,很可能是由.reduce()方法引起的:
class Solution {
solve(nums: Array<number>): boolean {
const Hash = {};
const Cache = {};
for (let val of nums) {
if (!Hash[val]) {
Hash[val] = 0;
}
Hash[val]++; //implicit else
}
const val_arr = Object.values(Hash);
return val_arr.reduce((accum, curr) => {
if (accum && Cache[curr] !== 'unique') {
Cache[curr] = 'unique';
return true;
}
return false;
}, true);
}
}
我不确定如何为种子初始值提供.reduce()方法的返回类型。我尝试将初始值更改为布尔类型,但仍然出现编译错误:
return val_arr.reduce((accum, curr) => {
if (accum && Cache[curr] !== 'unique') {
Cache[curr] = 'unique';
return true;
}
return false;
}, true as boolean);
我尝试搜索是否有其他人也遇到这个问题,但我找到的大多数帖子的初始值都是对象,所以我不太能理解它。最简单的解决方案似乎是重构以不使用 .reduce() 来解决此问题,但我只想知道如何创建一个与前面提到的 JS 解决方案“等效”的 TS 解决方案。