如何在打字稿中减去两个只读数组
How to subtract two readonly array in Typescript
我们知道我们不能在 Typescript 中连接只读数组,
但是我们可以做到这一点
readonly ArrA = [1, 2, 3] as const;
readonly ArrB = [4, 5] as const;
readonly Arr = [...ArrA, ...ArrB];
这样加法就完成了,减法呢?
ps:如果不是readonly,我们可以这样做
ArrA.filter(n => !ArrB.includes(n));
有很多方法可以做到这一点(减法):
filter
函数遍历 a1
的元素并将它(但在一个新数组中)缩减为 a1
中的元素(因为我们正在迭代它是元素)并且在 a2
.
中缺失
a2
中 a1
中缺失的元素将不会包含在结果数组(减法)中,因为过滤函数不会迭代 a2
元素:
readonly a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] as const;
readonly a2 = ['a', 'b', 'c', 'd'] as const;
let subtraction= a1.filter(item => a2.indexOf(item) < 0);
console.log(subtraction); // Output --> ["e", "f", "g"]
您也可以使用 lodash 执行此操作:
_.difference(['a', 'b', 'c', 'd', 'e', 'f', 'g'],['a', 'b', 'c', 'd']);
希望这能给您一些启发。谢谢。
如果您将 "ES7" 添加到 tsconfig.json
中的 compilerOptions.lib
,includes
将可用(无论是否只读)。
如果你关心数组成员级别的类型安全,你可以这样做:
const ArrA = [1, 2, 3] as const;
const ArrB = [3, 4, 5] as const;
// Aliases for tuple-member types
type ArrAMember = typeof ArrA[number] // (1 | 2 | 3)
type ArrBMember = typeof ArrB[number] // (3 | 4 | 5)
type ExclusionListMember = Exclude<ArrAMember, ArrBMember> // (1 | 2)
// Type-guard to verify exclusion
function isExcludedByB(i: ArrAMember): i is ExclusionListMember {
return !ArrB.includes(i as any)
}
const ArrC = ArrA.filter(isExcludedByB)
// ^ (1 | 2)[]
我们知道我们不能在 Typescript 中连接只读数组,
但是我们可以做到这一点
readonly ArrA = [1, 2, 3] as const;
readonly ArrB = [4, 5] as const;
readonly Arr = [...ArrA, ...ArrB];
这样加法就完成了,减法呢?
ps:如果不是readonly,我们可以这样做
ArrA.filter(n => !ArrB.includes(n));
有很多方法可以做到这一点(减法):
filter
函数遍历 a1
的元素并将它(但在一个新数组中)缩减为 a1
中的元素(因为我们正在迭代它是元素)并且在 a2
.
a2
中 a1
中缺失的元素将不会包含在结果数组(减法)中,因为过滤函数不会迭代 a2
元素:
readonly a1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] as const;
readonly a2 = ['a', 'b', 'c', 'd'] as const;
let subtraction= a1.filter(item => a2.indexOf(item) < 0);
console.log(subtraction); // Output --> ["e", "f", "g"]
您也可以使用 lodash 执行此操作:
_.difference(['a', 'b', 'c', 'd', 'e', 'f', 'g'],['a', 'b', 'c', 'd']);
希望这能给您一些启发。谢谢。
tsconfig.json
中的 compilerOptions.lib
,includes
将可用(无论是否只读)。
如果你关心数组成员级别的类型安全,你可以这样做:
const ArrA = [1, 2, 3] as const;
const ArrB = [3, 4, 5] as const;
// Aliases for tuple-member types
type ArrAMember = typeof ArrA[number] // (1 | 2 | 3)
type ArrBMember = typeof ArrB[number] // (3 | 4 | 5)
type ExclusionListMember = Exclude<ArrAMember, ArrBMember> // (1 | 2)
// Type-guard to verify exclusion
function isExcludedByB(i: ArrAMember): i is ExclusionListMember {
return !ArrB.includes(i as any)
}
const ArrC = ArrA.filter(isExcludedByB)
// ^ (1 | 2)[]