我手边有一个非常复杂的计算,我发现很难完成它。这里是。我有3张桌子。
表1 :( ID1和Sum是表的列)
ID1 | Sum
123456 |
345678 |
表2 :(城市,ID2是表格的列)
City | ID2
NY | 123456
CA | 345678
TX | 12345
BF | 34567
表3 :(城市,ID3是表格的列)
City | ID3
LA | 123456
NB | 12345
表1的最终输出应如下所示。
根据Table2和Table3的值,Table1应如下所示
ID1 | Sum
123456 | 4
345678 | 2
我将首先解释这个场景。我想更新'Table1'的列'Sum'。这将通过比较'Table1'的'ID1'列的前5个字符与'Table2'的'ID2'列中的前5个字符和'Table3'的'ID3'列进行比较来更新
例如表1的'12345'(注意实际值为'123456')与表2和表3的列数据进行比较。因此,在最终的表1中总和为4
表格的输入采用以下形式 表1: - (表2和表3采用相似的输入形式)
[Object][Object]
[0-1]
[0]: Object
ID1: '123456'
Sum:
[1]: Object
ID1: '345678'
Sum:
尝试解决方案:
function count(key) {
return function (r, a) {
r[a[key]] = (r[a[key]] || 0) + 1;
return r;
};
}
Table1.forEach(function (a) {
a.Sum = this[a.ID1] || '-';
}, Table2.reduce(count('ID2'), Table3.reduce(count('ID3'), Object.create(null))));
上述解决方案将ID1的值与ID2和ID3进行比较。我想只使用数据的前5个字符,然后如上所述进行比较。有人可以让我知道我的代码需要如何编辑才能解决我的问题。
答案 0 :(得分:0)
可能有一种比这更好的方法......一种选择是
var table1=[{id:'123456',sum:0},{id:'345678',sum:0},{id:'345',sum:0}];
var tables = {"table2":[{id1:'12345'},{id1:'12345'},{id1:'1234567'},{id1:'345'},{id1:'34567'},{id1:'3'}],"table3":[{id1:'12345'},{id1:'12345'},{id1:'1234567'},{id1:'34567'},{id1:'3'}],"table4":[],"table5":null,"table6":"","table7":[{id1:'12345'},{id1:'12345'},{id1:'1234567'},{id1:'34567'},{id1:'3'}]};
//foreach key/value in the table1 object
_.each(table1, function(a, b) {
var current = a.id;
a.sum = 0;
//foreach key/value in the tables
_.each(tables, function(c, d) {
//add check, expand this as required
if (c != undefined && c instanceof Array) {
a.sum += findTotal(c, current);
}
});
});
function findTotal(tableToWork, currentId) {
var sum = _.countBy(tableToWork, function(e, f) {
return e.id1.substring(0, 4) == currentId.substring(0, 4)
});
return sum.true == null ? 0 : sum.true;
}
document.getElementById('p').innerHTML = JSON.stringify(table1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<p id="p">
Hi
</p>
告诉我们。
答案 1 :(得分:0)
假设您有一个myMethod()
和一个数组aggTable
的源表及其关联的id列,通用解决方案可以如下所示:
srcTables