这两天,一个前端朋友在面试的笔试过程中遇到了一道类似于“用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. error: No rule to make target '/usr/lib/libOpenNI.so', needed by 'bin/euroc_rectify'。 停止。

    这类问题的出现说明程序在编译时,CMakeLists.txt 文件没有找到OpenNI.so, 即 Pangolin库未安装或破损. 重新安装pangolin库即可.(亲测)

  2. 如何做一个项目.ppt

    链接:https://pan.baidu.com/s/1q8Ogj0xYQV_vk-HGcszxqw 提取码:0a82 复制这段内容后打开百度网盘手机App,操作更方便哦

  3. pythonのdjango select_related 和 prefetch_related()

    在数据库有外键的时候,使用select_related() 和 prefetch_related() 可以很好的减少数据库请求次数,从而提高性能. (1)select_related()当执行它的查询 ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  5. 机器学习基石8-Noise and Error

    注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 上一节课,我们主要介绍了VC Dimension的概念.如果Hypothese ...

  6. 51nod1236 序列求和 V3

    这题炒鸡简单,只要第一步想对了后面顺风顺水QWQ(然鹅我没想到) 前置芝士: 斐波那契数列通项公式 等比数列求和公式 二项式定理 这题要求的就是 \(\sum_{i=1}^n Fib(i)^k\) , ...

  7. C++入门篇十三

    常对象: const  Person p1; 不可以调用普通成员函数,除非前面加了函数前面加了const可以调用常函数在对象之前加入const修饰 const Person p1; 常函数:void ...

  8. 初学python之路-day08前期总结

    # 1# 计算机原理:控制器 运算器 存储器 input设备 output设备 IO流# 三大核心:CPU 内存 硬盘 # 内存分布:栈区 与 堆区# 如二进制与十进制的转换,如1111转成十进制为1 ...

  9. 小程序:动态监测input和取值

    1.输入框失去焦点取值 wxml: <input bindblur="tab" type='text'></input> js: tab:function( ...

  10. linux下c通过虚拟地址映射读写文件的代码

    在代码过程中中,把开发过程中比较好的一些代码片段记录起来,如下的代码内容是关于 linux下c通过虚拟地址映射读写文件的代码,应该对小伙伴有些好处.#include<stdio.h>#in ...