每天学习一点点,成功增加一大步

NodeJs笔记:用 linq 解决两个数组的归类合并

NodsJS zhanghui 709℃

这几天在做 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 解决两个数组的归类合并