首页 > 用js如何判断一个集合是另一个集合里面子集代码?

用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;
【热门文章】
【热门文章】