需求描述:
托盘码是箱码的父级,箱码是盒码的父级?
问题:
这样的级联列表,怎么写才能获取一个父级的子集有哪些?数据传过来是一个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;