这几天在做 NodeJs 开发练习时遇到了问题是:有两个数组,它们分别是类目(category)数组和列表(list)数组,而列表数组里面有“categoryId”属性,而这个属性的值将会根据类目数组里面的“id”去做归类合并。为了解决这个问题从“度娘”到“谷歌”找了个遍没法直接的解决方法,后来在同事的提示下去用 linq 来试试,起初也是研究了半天没有直接解决,网络上都是一些简单的单数组处理,即便有两个(或多个)数组处理案例也都是简单的差集、交集和并集等的处理,没有像我这种比较复杂一点的,下面写下解决的过程。
首先准备文中提到的两个数组
类目(category)数组
[ { "name": "IT门户", "id": 1 }, { "name": "IT社交", "id": 2 } ]
列表(list)数组
[ { "siteName": "中关村在线", "url": "http://www.zol.com.cn/", "categoryId": 1 }, { "siteName": "博客园", "url": "https://www.cnblogs.com/", "categoryId": 2 }, { "siteName": "CSDN", "url": "https://www.csdn.net/", "categoryId": 1 }, { "siteName": "太平洋电脑网", "url": "", "categoryId": 1 } ]
那么处理之后的结构是
[ { "name": "IT门户", "id": 1, "childs": [ { "siteName": "中关村在线", "url": "http://www.zol.com.cn/", "categoryId": 1 }, { "siteName": "CSDN", "url": "https://www.csdn.net/", "categoryId": 1 }, { "siteName": "太平洋电脑网", "url": "", "categoryId": 1 } ] }, { "name": "IT社交", "id": 2, "childs": [ { "siteName": "博客园", "url": "https://www.cnblogs.com/", "categoryId": 2 } ] } ]
解决的过程
安装 linq 依赖库
npm install linq --save
安装完依赖库之后,在要使用的 ts 文件顶部引用
var Enumerable = require('linq');
最后使用双重循环就能达到想要的结果
// 外循环类目数组 for (let i = 0; i < parmas.categorys.length; i++) { let temp1 = parmas.categorys[i]; temp1.childs = []; // 内循环列表数组,使用 where 条件判断 将找到的数据追加到 temp1.childs 数组中 temp1.childs = Enumerable.from(parmas.websites).where(function (element) { return element.categoryId == temp1.id; }).toArray(); parmas.categorys[i] = temp1; }
转载请注明:隨習筆記 » NodeJs笔记:用 linq 解决两个数组的归类合并