在 Javascript 中创建多维数组和矩阵

2024-03-05

尝试创建一个函数mCreate()给定一组数字返回一个多维数组(矩阵):

mCreate(2, 2, 2)    
//   [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]

当此函数仅处理 2 个深度级别时,即:mCreate(2, 2) //[[0, 0], [0, 0]]我知道要做 2 个级别,你可以使用 2 个嵌套for loops但我遇到的问题是如何处理第 n 个参数。

这个问题是否可以通过递归更好地解决,否则我如何动态确定嵌套的数量for loops我需要给出参数的数量?

ps:最高效的方式固然很好,但不是必需的

RE-EDIT- 使用Benchmark.js检查perf后,结果如下:

BenLesh x 82,043 ops/sec ±2.56% (83 runs sampled)
Phil-P x 205,852 ops/sec ±2.01% (81 runs sampled)
Brian x 252,508 ops/sec ±1.17% (89 runs sampled)
Rick-H x 287,988 ops/sec ±1.25% (82 runs sampled)
Rodney-R x 97,930 ops/sec ±1.67% (81 runs sampled)
Fastest is Rick-H

@briancavalier也想出了一个很好的解决方案JSbin http://jsbin.com/mufugu/edit?js,console:

const mCreate = (...sizes) => (initialValue) => _mCreate(sizes, initialValue, sizes.length-1, 0)

const _mCreate = (sizes, initialValue, len, index) =>
    Array.from({ length: sizes[index] }, () => 
        index === len ? initialValue : _mCreate(sizes, initialValue, len, index+1))
mCreate(2, 2, 2)(0)

一个简单的递归答案是这样的(在 ES2015 中):

const mCreate = (...sizes) => 
    Array.from({ length: sizes[0] }, () => 
        sizes.length === 1 ? 0 : mCreate(...sizes.slice(1)));

JS斌在这里 http://jsbin.com/redahikusi/1/edit?js,console

编辑:我想我会添加初始化程序与更高阶的函数:

const mCreate = (...sizes) => (initialValue) => 
    Array.from({ length: sizes[0] }, () => 
        sizes.length === 1 ? initialValue : mCreate(...sizes.slice(1))(initialValue));

可以这样使用:

mCreate(2, 2, 2)('hi'); 
// [[["hi", "hi"], ["hi", "hi"]], [["hi", "hi"], ["hi", "hi"]]]

JSBin 的那个 http://jsbin.com/vimutudile/1/edit?js,console

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Javascript 中创建多维数组和矩阵 的相关文章

  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 取消html5浏览器中的单图请求

    我正在动态加载 大 图像以绘制到 html5 画布中 如下所示 var t new Image t onload t src http myurl 但每隔一段时间就会想取消图片请求完全地 我想出的唯一方法是设置src to i e t sr
  • 网站 YouTube 嵌入视频不断播放

    我正在使用 youtube 提供的 iframe 在我的网站上嵌入视频 我还使用了一个 css 弹出窗口 这是我从这个页面学到的http www pat burt com web development how to do a css po
  • 如何在ASP.NET Webform中使用Jquery表单插件?

    我遇到了这个插件 http malsup com jquery form getting started http malsup com jquery form getting started 我想知道如何在 ASP NET WebForm
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • 如何使用 jest 模拟第三方库

    我正在开发一个node js应用程序使用nestjs我有一堂课叫LoggerService如下 export class LoggerService private logger Rollbar constructor this logge
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • 将数组排序为第一个最小值、第一个最大值、第二个最小值、第二个最大值等

    编写一个JS程序 返回一个数组 其中第一个元素是第一个最小值 第二个元素是第一个最大值 依此类推 该程序包含一个函数 该函数接受一个参数 一个数组 该函数根据要求返回数组 输入示例 array 2 4 7 1 3 8 9 预期输出 1 9
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 哪个集合更适合存储多维数组中的数据?

    我有一个multi dimensional array of string 我愿意将其转换为某种集合类型 以便我可以根据自己的意愿添加 删除和插入元素 在数组中 我无法删除特定位置的元素 我需要这样的集合 我可以在其中删除特定位置的数据 也
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • Select2 下拉列表动态添加、删除和刷新项目

    这让我发疯 为什么 Select2 不能在其页面上实现清晰的方法或示例如何在 Select2 上进行简单的 CRUD 操作 我有一个 select2 从 ajax 调用获取数据
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 数据表日期范围过滤器

    如何添加日期范围过滤器 like From To 我开始进行常规搜索和分页等工作 但我不知道如何制作日期范围过滤器 我正在使用数据表 1 10 11 版本 My code var oTable function callFilesTable
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 连接到 pyqtSignal 的 lambda 中对象的生命周期

    假设我有一个对象 并希望在发出 PyQt 信号时执行其方法之一 假设我希望它使用信号未传递的参数来执行此操作 所以我创建了一个 lambda 作为信号槽 class MyClass object def init self model mo
  • 仅使用页面数据通过 Javascript 触发浏览器的“另存为”对话框

    作为页面输出的一部分 我在文本区域中包含了数据表的 CSV 格式版本 以便用户可以轻松地将 CSV 导出复制 粘贴到他们选择的电子表格中 我想要一种方法 有一个按钮 当单击该按钮时 将触发 另存为 对话框 该对话框将下载页面文本区域中已存在
  • 动态数组:使用 realloc() 无内存泄漏

    我使用 realloc 来调整分配的内存大小 char get channel name void char result int n result char 0 for elem snd mixer first elem handle n
  • 在快速中间件中记录请求和响应

    我正在尝试实现一个记录器Express http expressjs com应用 我需要它能够记录请求以及为每个请求发回的响应 状态代码和正文 我开始编写一个如下所示的中间件 function req res next res on fin
  • 从数据库检索数据时如何转义特殊字符?

    我将根据从 SQL Server 返回的数据生成 XML 文件 但有一些特殊字符 例如 x1F and x1C 可能还有其他类似的字符 这将使 XML 失败 有什么办法可以逃离他们吗 Thanks 控制字符 U 001C 文件分隔符 和 U
  • 在Java中一次向ArrayList添加多个项目[重复]

    这个问题在这里已经有答案了 如何一次向 ArrayList 添加多个项目 ArrayList
  • 如何从虚拟环境 (virtualenv) 启动 python Idle

    我有一个从虚拟环境安装的软件包 如果我只是启动 python 解释器 则可以很好地导入该包 但是 如果我启动 Idle 则无法导入该包 因为它仅在一个特定的 virtualenv 中可用 而不是在全局中可用 如何从 virtualenv 启
  • 使用 GDI+ 和 C# 更改图像对比度

    我的问题如下 我正在制作一个程序 可以通过 C 代码操纵亮度 伽玛和对比度 对于亮度和伽玛来说还可以 我已经通过在网上找到的代码实现了它 但我不能进行对比 到目前为止我唯一发现的是CalculateRamp方法 其输入参数 double l
  • 如何使用 JavaScript 更改 div 内容?

    我有简单的 HTML 代码和一些 JavaScript 看起来像
  • Chrome 和可能 Opera 自动对对象属性进行排序

    问题是 Chrome 会自动对对象的属性进行排序 如果我有一个像这样的对象 var obj 4 first 2 second 1 third 然后当我下一步时 for var i in obj console debug obj i 我看到
  • 在网页中嵌入 IRC 客户端的最佳方式

    我正在寻找一个好的 免费的 最好是开源的 IRC 客户端来嵌入网页中 支持大多数浏览器的明显要求是 如果需要插件 则该插件应该是已经广泛部署的插件 并且不应该给提供页面服务的网络服务器带来太大压力 不是一个真正的编程问题 但是Mibbit
  • JQuery - 从数据动态生成图形树视图

    我想动态生成一个树视图来表示应用程序中的用户连接 但我不希望它看起来像普通的树视图 看起来像文件系统结构 如下所示 但更像是这样的流程图 所以基本上我想以比树视图更图形化的方式显示它 如果可能的话 能够放大和缩小 如何才能实现这一目标 你知
  • Blackberry - 具有不同 ID 的可点击 BitmapField

    我正在创建一个应用程序 在其中我通过 JSON 从 Web 服务器获取带有 id 的礼品图像 当我点击任何礼物图像时 它会进入下一页 其中显示该图像的所有信息 通过 JSON 从 Web 服务器获取图像信息及其 ID 问题是 当我点击页面上
  • 轴。即使api返回404错误,如何在try catch finally中获得错误响应

    for e g async gt let apiRes null try apiRes await axios get https silex edgeprop my api v1 a catch err console error err
  • R 上的实时图表 - Shiny

    我正在尝试制作一个交互式图表 在一个闪亮的应用程序上绘制金融股票数据 我的尝试是不断更新数据 从而更新图表 我使用一个名为 Highcharter 的包来管理这个 下面显示了服务器部分的部分代码 getDataIntraday 接收两个输入
  • 向路由器或视图集添加更多视图 (Django-Rest-Framework)

    本质上 我试图找到一种在不创建自定义路由器的情况下将更多视图附加到路由器的好方法 有什么好的方法可以实现这个目标呢 这与我想要实现的目标相当 为了这个问题 变量名已经改变 我想介绍的示例方法也被极其简化 Router router rout
  • Python 3、网页抓取和 Javascript [天哪]

    我已经到了使用 Javascript 和 Python3 进入网页抓取混战的阶段 我很清楚我的靴子可能会碰到一匹死马 但我还是想拔出我的六发枪 这是一部意大利式西部片 是我的灰帽子吗 背景故事 我正在使用Python 3 2 3 我有兴趣收
  • 使用谷歌分析数据将嵌套行转置为bigquery中的列

    我感兴趣的是使用自定义维度属性来吸引访问者 其中每一行都是一个唯一的 fullvisitorid 列是所需的自定义维度值 以伦敦头盔为例 在这里我用我感兴趣的两个自定义尺寸来吸引访客 SELECT fullvisitorid customD
  • AWS lambda 与 python asyncio。事件循环闭合问题?

    关闭 aws lambda 中的事件循环会影响未来的 lambda 运行吗 我有一些 aysncio python 代码在 aws lambda 服务中运行 代码逻辑如下 def lambda handler event context l
  • 在 Javascript 中创建多维数组和矩阵

    尝试创建一个函数mCreate 给定一组数字返回一个多维数组 矩阵 mCreate 2 2 2 0 0 0 0 0 0 0 0 当此函数仅处理 2 个深度级别时 即 mCreate 2 2 0 0 0 0 我知道要做 2 个级别 你可以使用