javascript - 我可以在 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
解决方案
这与 无关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)的数组数组工作。
推荐阅读
- wso2esb - 如何在 xml 中的 wso2 企业集成器 7 ide 中添加 .csr 证书
- react-native - React Native 我想要嵌套文本中的样式
- kotlin - 查看 Gradle 依赖项的文档
- jquery - 尝试创建机会时出现 Vtiger Web 服务 API 错误
- node.js - 执行操作时如何显示存储在 mongoDB 中的图像文件
- javascript - 即使我的函数有效,为什么我会收到错误“无法读取未定义的属性 itemId”?
- bash - 将 docker 映像推送到 aws ecr 和 bash 脚本
- php - Laravel:如何在帖子列表数据表中显示作者姓名
- android - 如何在本机反应中使用单个导航器而不是多个导航器?
- java - 为什么在Mysql中插入时时间会改变?