javascript - 用js如何判断一个集合是另一个集合里面子集代码?

查看:84
本文介绍了javascript - 用js如何判断一个集合是另一个集合里面子集代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

需求描述:
托盘码是箱码的父级,箱码是盒码的父级?
问题:
这样的级联列表,怎么写才能获取一个父级的子集有哪些?数据传过来是一个json串。
谁能帮我看看,实在是想不通了!

解决方案

{
    "proId": "22",
    "proDate": "2016-08-12",
    "packType": "2",
    "proName": "33333",
    "palletCode": "1214",
    "packCodeList": [{
        "packCode": "1213",
        "boxCodeList": ["1111",
            "1211"]
    }],
    "batchId": "123"
}

如果箱是一个数组,那么可能是这样

var proes = [
    {
        "proId": "22",
        "proDate": "2016-08-12",
        "packType": "2",
        "proName": "33333",
        "palletCode": "1214",
        "packCodeList": [{
            "packCode": "1213",
            "boxCodeList": ["1111",
                "1211"]
        }],
        "batchId": "123"
    },
    {
        "proId": "23",
        "proDate": "2016-08-12",
        "packType": "2",
        "proName": "444444",
        "palletCode": "1214",
        "packCodeList": [{
            "packCode": "1213",
            "boxCodeList": ["1111",
                "1211"]
        }],
        "batchId": "123"
    }
];

把它对应的 palletCode 处理个关系出来

var map = proes.reduce((all, p) => {
    // 确保创建了一个数组
    var list = all[p.palletCode] = all[p.palletCode] || [];
    list.push(p);
    return all;
}, {});

现在你得到了一个 palletId -> [proOjbect] 这样一个 map,当你得到一个 palletId 之后就可以很容易取出来箱列表

let palletId = getPalletId();
let list = map[palletId] || [];

后面 || [] 是处理没找到 list 的情况。

至于从箱到盒,有个 "packCodeList" 都已经保存了。如果需要像上面那个通过映射表来取,也可以用类似的办法创建一个映射表,这个就简单一些

// proId -> proObject 映射
var map2 = proes.reduce((all, p) => {
    all[p.proId] = p;
}, {});

补充一下

如果你只需要编码列表

var list = (map[palletId] || []).map(obj => obj.proId);

var list2 = ((map2[proId] || {}).packCodeList || [])
    .map(obj => obj.packCode;

这篇关于javascript - 用js如何判断一个集合是另一个集合里面子集代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆