JavaScript趣题:多维数组初始化
来源:互联网 发布:图片隐写术 python 编辑:程序博客网 时间:2024/06/05 06:23
有时候,我们需要创建一个多维的数组,并将它初始化为我们想要的默认值。
通常情况下,我们会先创建一个一维数组,接着在这个一维数组内引用二维数组......直到N维数组,然后把它的内容填充为默认值。
这个过程,我们需要写很多循环,难免有些繁琐,那么,何不想办法写个多维数组初始化的工具方法,方便我们来调用呢?
我猜你一定想要个这样的方法:
dim( d1 [,d2 [,d3 [... ]]], value )
来看它的参数列表,d1,d2,d3代表各个维度数组所引用的元素个数,value代表初始值。
这个value可能是函数,如果是这种情况,我们就引用函数的返回值。
来看看几个例子:
dim( 3,3,"x" ) // => [['x','x','x'],['x','x','x'],['x','x','x']]
这里一位数组引用了3个二维数组,每个二维数组引用了3个初始化值’x’
dim( 2,2,2,0 ) // => [[[0,0],[0,0]],[[0,0],[0,0]]]
这里规则同上
dim( 3, true ) // => [true,true,true]
这里一维数组引用了3个boolean值true
var xxx = function(){ return "xX" }
dim( 2,5,xxx ) // => [['xX','xX','xX','xX','xX'],['xX','xX','xX','xX','xX']]
这里初始化值是一个函数,所以我们填充它返回的结果
这个题目因为涉及到N维的数组,所以需要使用递归。
它是一个边构建数组,边深度遍历的过程。
在我的方法中,使用了一个参数deep记录当前的深度。
比如dim( 2,2,2,0 ),如果当前deep为0,那么就对应第一个参数2,说明要创建2个数组,也就是说,deep的值和参数列表的索引是一致的,代表要构建多少个数组或值。
如果deep达到了最深,说明可以进行初始化赋值了,for循环填充当前的数组。
function dim(){ var len = arguments.length; var args = Array.prototype.slice.call(arguments,0,len-1); var content = arguments[len-1]; var result = []; var traverse = function foo(from,deep){ var arg = args[deep]; if(deep < args.length - 1){ for(var i=0;i<arg;i++){ var array = []; from.push(array); foo(array,deep+1); } } else{ for(var i=0;i<arg;i++){ if(typeof content === "function"){ from.push(content()); } else{ from.push(content); } } } }; traverse(result,0); return result;}
- JavaScript趣题:多维数组初始化
- 多维数组的初始化
- 多维数组的初始化
- 初始化多维数组
- JavaScript实现多维数组
- JavaScript遍历多维数组
- [转]Python多维数组初始化
- 用单循环初始化多维数组
- vector多维数组及初始化
- javascript多维数组的排序
- 多维数组、嵌套结构的初始化
- delphi 初始化多维动态数组的方法
- perl常量+多维数组+变量的初始化
- C++ vector多维数组初始化及清零
- C++ vector多维数组初始化及清零
- python 多维数组的初始化生成
- C++ vector多维数组初始化及清零
- 【python学习笔记】多维数组初始化
- linux杂记2
- VertrigoServ & TestLink 安装使用过程
- linux中probe函数中传递的参数来源(上)
- cocos2dx 场景切换的时候onEnter,onExit的执行顺序
- 如何启用 Service ,如何停用
- JavaScript趣题:多维数组初始化
- 技巧:删除桌面上提示找不到该项目的文件
- nginx负载均衡
- 关于butterknife:8.4.0使用详解。
- Java中关于最简单的输入输出字节流操作
- linux中probe函数传递参数的寻找(下)
- sql 函数实现三种父子递归
- Jenkins环境搭建指导文档【0】-- 安装
- LeetCode: Word Break