首页 > 解决方案 > 我可以在 Javascript 中设置一个二维数组作为键吗?

问题描述

我想使用二维数组作为 JavaScript 中的键集。是否可以?

let set = new Set();
let myArr = new Array(2).fill(0).map(() => new Array(2).fill(0));
set.add(myArr);
let myArr2 = new Array(2).fill(0).map(() => new Array(2).fill(0));
set.add(myArr2); // It should not add a new element to the set because it's the same array

标签: javascriptarraysset

解决方案


这与 无关Set:无论何时new Array(或类似),您都会创建一个的、不同的数组,无论它内部是否与另一个数组具有相同的值。这些数组占用单独的内存。对于 JavaScript,两个数组只有在它们确实是相同的单个数组(不是两个相同的数组)时才相等。

但是,如果您希望不同的数组在它们具有相同的形状和相同的原始值时被认为是相同的,那么您可以使用它们的字符串化版本作为键:

let set = new Set();
let myArr = new Array(2).fill(0).map(() => new Array(2).fill(0));
set.add(JSON.stringify(myArr));

let myArr2 = new Array(2).fill(0).map(() => new Array(2).fill(0));
set.add(JSON.stringify(myArr2));

console.log(...set);

请注意,这JSON.stringify不是任何JavaScript 对象的解决方案,但它可以根据需要为 JSON 支持的原始值(字符串、数字、布尔值、null)的数组数组工作。


推荐阅读