这两天,一个前端朋友在面试的笔试过程中遇到了一道类似于“用js实现将一个具有相同code值的一维数组转换成相同code值在一起的二维数组”的题目。他面试过后,把这个问题抛给了我,问我会实现吗?说实话,一开始,我也懵,我唯一能想起来的就是遍历这个一维数组,然后拿数组中的code值来做比较,但是真实现起来就没那么容易了,况且以前我也没有实现过这样的功能,平时的开发中好像也没遇到过这样的功能。

来看看大概的笔试题吧:

let arr = [
{code: "China", name: "xiaohuai"},
{code: "Africa", name: "neiLuoBi"},
{code: "Asia", name: "hanGuo"},
{code: "China", name: "tnnyang"},
{code: "Africa", name: "nanFei"},
{code: "China", name: "yangMan"}
]

以上是一个具有相同code值的一维数组,需要转换成如下的二维数组:

let arr = [
[ {code: "China", name: "xiaohuai"}, {code: "China", name: "tnnyang"}, {code: "China", name: "yangMan"} ],
[ {code: "Africa", name: "neiLuoBi"}, {code: "Africa", name: "nanFei"} ],
[ {code: "Asia", name: "hanGuo"} ]
]

看明白了吧。

那么就来看看如何实现这样的一个效果吧:

let arr = [
{code: "China", name: "xiaohuai"},
{code: "Africa", name: "neiLuoBi"},
{code: "Asia", name: "hanGuo"},
{code: "China", name: "tnnyang"},
{code: "Africa", name: "nanFei"},
{code: "China", name: "yangMan"}
] var map = new Map();
var newArr = [];
arr.forEach(item => {
map.has(item.code) ? map.get(item.code).push(item) : map.set(item.code, [item]);
}) newArr = [...map.values()]; console.log(newArr);

实现了一维数组转二维,那么再将转换后的二维数组转换为一维数组呢?还是直接上代码吧:

let arr = [
[ {code: "China", name: "xiaohuai"}, {code: "China", name: "tnnyang"}, {code: "China", name: "yangMan"} ],
[ {code: "Africa", name: "neiLuoBi"}, {code: "Africa", name: "nanFei"} ],
[ {code: "Asia", name: "hanGuo"} ]
] //方法一:
function reduceDimension(arr) {
var reduced = [];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr[i].length; j++) {
reduced.push(arr[i][j]);
}
}
return reduced;
} console.log(reduceDimension(arr)); //方法二:
console.log([].concat.apply([], arr));

方法一是循环遍历,没啥说的。方法二有必要说一下,apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,也就是说该数组的各个元素将会依次成为被调用函数的各个参数。

本文参考:

https://segmentfault.com/q/1010000015730645

https://www.cnblogs.com/liveoutfun/p/9195927.html

https://www.cnblogs.com/front-end-ralph/p/4871332.html

js将一个具有相同键值对的一维数组转换成二维数组的更多相关文章

  1. php数组根据某一个键值,把相同键值的合并生成一个新的二维数组

    http://blog.csdn.net/xyzchenxiaolin/article/details/51700485 源数据: $infos = array( array( 'a' => 3 ...

  2. php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

    版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二 ...

  3. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  4. JS框架_(Qrcode.js)将你的内容转换成二维码格式

    百度云盘 传送门 密码:304e 输入网址点击按钮生成二维码,默认为我的博客首页 二维码格式演示 <!DOCTYPE html> <html lang="en"& ...

  5. js将一维数组转化为二维数组

    遇到的问题: 后端返回的是一组一维数组,但是需要展示的格式是二维数组,常见的场景举例:后台返回10个长度的数组,需要分成3个一组展示在banner上. 例:[1,2,3,4,5,6,7,8,9,10] ...

  6. JS table内容转成二维数组,支持colspan和rowspan

    思路:1.先初始化colspan的数据到数组2.根据rowspan和colspan计算th和td的矩阵二次填充数组 说明:需要引用到第三方库jQuery,table中的th和td行和列跨度必须正确 & ...

  7. php二维数组去除重复值

    <?php //二维数组 $test["aa"] = array("id"=>"17","name"=> ...

  8. php二维数组修改键名

    最近遇到一个问题,是关于json数据提交的时候,总是报出[object object]的错误,查了晚上需要资料,大部分的说法是json数据格式不规范导致的错误.一般建议说将dataType类型注释掉. ...

  9. 二维数组去除重复值和array_unique函数

    今天遇到了一个问题,就是从数据库中去除的数组为一个二维数组,现在就是想将二位数组进行去重,但是在php中,对于一个一维数组,我们可以直接使用php的系统函数array_unique,但是这个函数不能对 ...

随机推荐

  1. 最小生成树--克鲁斯卡尔算法(Kruskal)

    按照惯例,接下来是本篇目录: $1 什么是最小生成树? $2 什么是克鲁斯卡尔算法? $3 克鲁斯卡尔算法的例题 摘要:本片讲的是最小生成树中的玄学算法--克鲁斯卡尔算法,然后就没有然后了. $1 什 ...

  2. 使用git把本地目录传到远程仓库

    需求: 要把本地不为空的一个目录和远程现有的一个仓库关联 步骤如下: git init //生成.git目录 git add . //把当前目录里的文件加入到暂存区 git commit -m '上传 ...

  3. 项目Alpha冲剂(3/10)

    1.项目燃尽图 2.今日进度描述 项目进展 完成数据库和服务器的连接部分,完成了一些应用的基本功能. 问题困难 完成了服务器的成功配置,同时实现了客户端与服务器的连接 心得体会 进度有明显的变化,成员 ...

  4. Salesforce知识整理(一)之Lightning Web Component Tools

    目录 LWC知识整理(一) 工具 Salesforce CLI Visual Studio Code(VS Code) Developer Hub(Dev Hub) 开启Dev Hub 相关资料 茶余 ...

  5. Django Rest framework Swagger生成api文档

    关于swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: - Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. ...

  6. Java后端学习,推荐书籍和学习路线

    最近在学习Java和全栈开发,推荐一些有用的书籍 书架主要针对Java后端和全栈开发用的 书籍介绍 <Spring Boot 2.0企业级应用开发实战> 本书深入浅岀地讲解了 Spring ...

  7. 如果没有<form>标签,也没有enctype="multipart/form-data"属性,怎么使用formData对象提交表单呢?如下方式

    form标签的enctype属性 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码. 默认地,表单数据会编码为 "application/x-www-form-urlen ...

  8. VMware虚拟机扩充硬盘容量

  9. 1、Jenkins的安装与简单配置

    Jenkins安装 1.安装Jenkins之前先部署安装java环境(java环境安装另外参考安装文档) 注意:Jenkins 需要运行 Java 5以及以上的版本. 安装环境:CentOS7.3+J ...

  10. hadoop mkdir: Cannot create directory /usr. Name node is in safe mode.

    今天在hdfs上面创建文件夹的时候报了:org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name ...