-
简单left join实现
JCalculator本身并没有提供left join这个接口,我实践中绝大多数都是在数据库就完成这步了。但数据库也有可能存在一个库是oracel,一个是mysql的情况,两个库同时用。一份数据从oracle出来,一份数据从mysql出来,无法关联。所有还是有必要给出一个这样的demo。
// 商店ID关联数据 var left = [ { id: 1, name: "apple", price: 5, shopID: 2 }, { id: 2, name: "banana", price: 3, shopID: 3 } ]; var right = [ { id: 1, name: "othersShop", tel: "1317866765" }, { id: 2, name: "appleShop", tel: "1246531231" }, { id: 3, name: "bananaShop", tel: "124512551" } ]; //转成对象,类似数据库根据ID建立索引的功能,理解数据逻辑和性能上这都更好 var rightIndex = {}; jc.map(right, function (row) { rightIndex[row.id] = row }) console.log(rightIndex) /* output: { "1":{"id":1,"name":"othersShop","tel":"1317866765"}, "2":{"id":2,"name":"appleShop","tel":"1246531231"}, "3":{"id":3,"name":"bananaShop","tel":"124512551"} }*/ var leftJoin = jc.sql({ select: { col: { name: "name", price: function (row) { return row.price + "$"; }, shopName: function (row) { var rightRow = rightIndex[row.shopID]; return rightRow.name; }, tel: function (row) { var rightRow = rightIndex[row.shopID]; return rightRow.tel; } } }, from: left }); console.log(leftJoin); /* output: [ {"name":"apple","price":"5$","shopName":"appleShop","tel":"1246531231"}, {"name":"banana","price":"3$","shopName":"bananaShop","tel":"124512551"} ]*/