JavaScript实现数组降维详解
发布时间 - 2026-01-10 22:19:09 点击率:次二维数组降维

二维数组只有两个维度,降维比较简单,也不用考虑太复杂的算法逻辑,我们看一下二维数组降维的几种方法;
遍历降维
var arr = [
['h', 'e', 'l', 'l', 'o'],
['m', 'y'],
['w', 'o', 'r', 'l', 'd'],
['!']
];
var result = [];
for (var r = 0; r < arr.length; r++) {
for (var c = 0; c < arr[r].length; c++) {
result.push(arr[r][c]);
}
}
console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]
此方法思路简单,利用双重循环遍历二维数组中的每个元素并放到新数组中。
使用concat
利用concat方法,可以将双重循环简化为单重循环:
var arr = [
['h', 'e', 'l', 'l', 'o'],
['m', 'y'],
['w', 'o', 'r', 'l', 'd'],
['!']
];
var result = [];
for (var r = 0, result = []; r < arr.length; r++) {
result = result.concat(arr[r]);
}
console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]
arr的每一个元素都是一个数组或参数,作为concat方法的参数,数组中的参数或每一个子元素又都会被独立插入进新数组。
使用apply+concat
apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数;
var arr = [ ['h', 'e', 'l', 'l', 'o'], ['m', 'y'], ['w', 'o', 'r', 'l', 'd'], ['!'] ]; var result = Array.prototype.concat.apply([], arr); console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]
利用apply方法,只需要一行代码就可以完成二维数组降维了。
多维数组降维
多维数组就没二维数组那么简单了,因为不确定数组的深度,所以也不能进行遍历来降维,只能通过递归或者栈方法来实现。
递归
Array.prototype.deepFlatten = function() {
var result = []; //定义保存结果的数组
this.forEach(function(val, idx) { //遍历数组
if (Array.isArray(val)) { //判断是否为子数组
val.forEach(arguments.callee); //为子数组则递归执行
} else {
result.push(val); //不为子数组则将值存入结果数组中
}
});
return result; //返回result数组
}
var arr = [2, 3, [2, 2],
[3, 'f', ['w', 3]], { "name": 'Tom' }
];
console.log(arr.deepFlatten()); //=>[ 2, 3, 2, 2, 3, 'f', 'w', 3, { name: 'Tom' } ]
这是通过递归的方法实现了多维数组的降维,在这里面,我有使用了原型链将方法封装进了Array原型中,可以直接在数组方法中调用。
栈方法
Array.prototype.deepFlatten = function() {
var result = []; //定义保存结果的数组
var stack = this; //将数组放入栈中
while (stack.length !== 0) { //如果栈不为空,则循环遍历
var val = stack.pop(); //取出最后一个值
if (Array.isArray(val)) { //判断是不是数组
stack = stack.concat(val); //如果是数组就将拼接入栈中
} else {
result.unshift(val); //如果不是数组就将其取出来放入结果数组中
}
}
return result;
}
var arr = [2, 3, [2, 2],
[3, 'f', ['w', 3]], { "name": 'Tom' }
];
console.log(arr.deepFlatten()); //=>[ 2, 3, 2, 2, 3, 'f', 'w', 3, { name: 'Tom' } ]
这是通过栈方法,建立了一个栈,将数组的内容存进去,然后逐个取出来,如果取出来的是个数组,就将这个数组打散拼接进栈中,在出栈一个,这样循环。
多维数组降维的方法也可以降维二维数组,但是有点大材小用,还是用对的方法做对的事才是最好的!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# js数组降维
# 数组降维
# js
# 数组
# python如何对数组进行降维
# js多维数组降维的5种方法
# JS数组降维的几种方法详解
# js最全的数组的降维5种办法(小结)
# JS数组降维的实现Array.prototype.concat.apply([]
# arr)
# Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
# 如何轻松实现Python数组降维?
# 递归
# 多维
# 遍历
# 组中
# 这是
# 就将
# 的是
# 都是
# 大材小用
# 第一个
# 最好的
# 将会
# 才是
# 在这
# 我有
# 进了
# 将其
# 就没
# 第二个
# 可以直接
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
使用C语言编写圣诞表白程序
Laravel怎么连接多个数据库_Laravel多数据库连接配置
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel怎么清理缓存_Laravel optimize clear命令详解
微信h5制作网站有哪些,免费微信H5页面制作工具?
Laravel如何记录自定义日志?(Log频道配置)
长沙做网站要多少钱,长沙国安网络怎么样?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
如何快速生成专业多端适配建站电话?
js实现点击每个li节点,都弹出其文本值及修改
C语言设计一个闪闪的圣诞树
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何在局域网内绑定自建网站域名?
如何在建站之星绑定自定义域名?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
如何用IIS7快速搭建并优化网站站点?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
香港服务器租用费用高吗?如何避免常见误区?
高端企业智能建站程序:SEO优化与响应式模板定制开发
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何打造高效商业网站?建站目的决定转化率
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
如何在阿里云完成域名注册与建站?
Laravel如何处理CORS跨域请求?(配置示例)
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
详解jQuery中的事件
Laravel怎么在Blade中安全地输出原始HTML内容
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel定时任务怎么设置_Laravel Crontab调度器配置
移动端脚本框架Hammer.js
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
浅谈redis在项目中的应用
大同网页,大同瑞慈医院官网?
如何在腾讯云免费申请建站?
Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
简单实现Android验证码
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Python文件流缓冲机制_IO性能解析【教程】
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Laravel如何自定义分页视图?(Pagination示例)
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
网站制作软件免费下载安装,有哪些免费下载的软件网站?

