delete
operator with computed key expressions JS-032026 removeTokenInfo: (networkName, ticker) => {
27 set(
28 produce((state) => {
29 delete state.tokenInfo[networkName][ticker]30 }),
31 )
32 },
35 removeObject: (objectName) => {
36 set(
37 produce((draft) => {
38 delete draft.objects[objectName]39 }),
40 )
41 },
46 removeNetworkInfo: (networkName) => {
47 set((current) =>
48 produce(current, (draft) => {
49 delete draft.networkInfo[networkName]50 }),
51 )
52 },
76 removeKeyAgent(name) {
77 return set(
78 produce((state) => {
79 delete state.keyAgents[name]80 }),
81 )
82 },
37 removeCredential: (credentialName) => {
38 set(
39 produce((state) => {
40 delete state.credentials[credentialName]41 }),
42 )
43 },
Deleting dynamically computed keys can be dangerous and in some cases not well optimized.
Using the delete
operator on keys that aren't runtime constants could be a sign that you're using the wrong data structures.
Using Objects
with added and removed keys can cause occasional edge case bugs, such as if a key is named "hasOwnProperty"
.
Consider using a Map
or Set
if you’re storing collections of objects.
// Can be replaced with the constant equivalents, such as container.aaa
delete container['aaa'];
delete container['Infinity'];
// Dynamic, difficult-to-reason-about lookups
const name = 'name';
delete container[name];
delete container[name.toUpperCase()];
const container: { [i: string]: number } = {
/* ... */
};
// Constant runtime lookups by string index
delete container.aaa;
// Constants that must be accessed by []
delete container[7];
delete container['-Infinity'];