通过与其他表

时间:2017-01-11 01:32:07

标签: javascript angularjs arrays object underscore.js

我手边有一个非常复杂的计算,我发现很难完成它。这里是。我有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个字符,然后如上所述进行比较。有人可以让我知道我的代码需要如何编辑才能解决我的问题。

2 个答案:

答案 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