求教二维哈希表去重及求和方法

cyzn_lfss 2023-9-13 1169

Code AardioLine:16复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
    • import console;
    • //原表数据
    • var temptab={
    • [1]={"品名"="A1";"产地"="B1";"售价"="5";"数量"="20";"金额"="100.00"};
    • [2]={"品名"="A2";"产地"="B2";"售价"="5";"数量"="5";"金额"="25.00"};
    • [3]={"品名"="A1";"产地"="B1";"售价"="5";"数量"="3";"金额"="15.00"};
    • [4]={"品名"="A2";"产地"="B2";"售价"="5";"数量"="8";"金额"="40.00"};
    • }
    • //对品名、产地、售价相同的进行去重,然后对数量、金额求和
    • //希望得到去重汇总后的结果
    • var tab={
    • [1]={"品名"="A1";"产地"="B1";"售价"="5";"数量"="23";"金额"="115.00"};
    • [2]={"品名"="A2";"产地"="B2";"售价"="5";"数量"="13";"金额"="65.00"};
    • }
    • //求群内大佬指点
    • console.pause(true);



    最新回复 (10)
    • aarman 2023-9-13
      1 2
      Code AardioLine:12复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
      • var tab={};
      • table.filter(temptab,function(v,index){
      • var flag=1;
      • table.filter(tab,function(v1,i){
      • if (v.品名==v1.品名?v.产地==v1.产地?v.售价==v1.售价) {
      • v1.数量+=v.数量;
      • v1.金额=v1.数量*v1.售价;
      • flag=0;
      • }
      • })
      • if flag table.push(tab,v);
      • })


    • cyzn_lfss 2023-9-13
      0 3
      aarman var tab={}; table.filter(temptab,function(v,index){ var flag=1; table.filter( ...
      膜拜大佬!谢谢大佬!!
    • netfox 2023-9-13
      0 4

    • cyzn_lfss 2023-9-14
      0 5
      用是用上了。还很好用👍 但技巧没有学会😂
    • aarman 2023-9-15
      1 6
      Code AardioLine:12复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
      • var tab={};
      • for(k,v in temptab){
      • var flag=1;
      • for(k1,v1 in tab){
      • if (v.品名==v1.品名?v.产地==v1.产地?v.售价==v1.售价) {
      • v1.数量+=v.数量;
      • v1.金额=v1.数量*v1.售价;
      • flag=0;
      • }
      • }
      • if flag table.push(tab,v);
      • }


    • cyzn_lfss 2023-9-16
      0 7

      这次就更清晰了!通过这几天不停的思考也模糊也了解了用filter进行遍历的方便 总结了一下,基本上学到了几点: 

      1是用问号连接比用and更加迅捷;

       2用flag这个自定义开关进行分流的妙用 

      3filter不一定非得返回新数组,拿来当forin也很方便

       再次感谢大佬的指点和解惑🌹🌹

    • 光庆 2023-9-17
      0 8
      Code AardioLine:52复制
    • 1.
    • 2.
    • 3.
    • 4.
    • 5.
    • 6.
    • 7.
    • 8.
    • 9.
    • 10.
    • 11.
    • 12.
    • 13.
    • 14.
    • 15.
    • 16.
    • 17.
    • 18.
    • 19.
    • 20.
    • 21.
    • 22.
    • 23.
    • 24.
    • 25.
    • 26.
    • 27.
    • 28.
    • 29.
    • 30.
    • 31.
    • 32.
    • 33.
    • 34.
    • 35.
    • 36.
    • 37.
    • 38.
    • 39.
    • 40.
    • 41.
    • 42.
    • 43.
    • 44.
    • 45.
    • 46.
    • 47.
    • 48.
    • 49.
    • 50.
    • 51.
    • 52.
      • import console;
      • //原表数据
      • var temptab={
      • fields={"品名";"产地";"售价";"数量";"金额"}
      • }
      • for(i=1;100000;1){
      • ..table.append(temptab,{
      • [1]={"品名"="A1";"产地"="B1";"售价"="3";"数量"=2;};
      • [2]={"品名"="A2";"产地"="B2";"售价"="3";"数量"=2;};
      • [3]={"品名"="A1";"产地"="B1";"售价"="3";"数量"=2;};
      • [4]={"品名"="A2";"产地"="B2";"售价"="3";"数量"=2;}; }
      • )
      • }
      • // 方法一
      • var t = time.tick()
      • var tab={};
      • for(i=1;#temptab;1){
      • for(n=1;#tab;1){
      • if tab[n].品名=temptab[i].品名 and tab[n].产地=temptab[i].产地 and tab[n].售价=temptab[i].售价 {
      • tab[n].数量 = tab[n].数量+temptab[i].数量
      • tab[n].金额 = tab[n].金额 + temptab[i].数量*temptab[i].售价
      • continue 2
      • }
      • }
      • ..table.push(tab,{ "品名"=temptab[i].品名,
      • "产地"=temptab[i].产地;
      • "售价"=temptab[i].售价;
      • "数量"=temptab[i].数量;
      • "金额"=temptab[i].数量*temptab[i].售价});
      • }
      • console.dump(time.tick()-t,tab)
      • // 方法二
      • var t = time.tick()
      • var tab={};
      • table.filter(temptab,function(v,index){
      • var flag=1;
      • table.filter(tab,function(v1,i){
      • if (v.品名==v1.品名 and v.产地==v1.产地 and v.售价==v1.售价) {
      • v1.数量+=v.数量;
      • v1.金额=v1.数量*v1.售价;
      • flag=0;
      • }
      • })
      • if flag table.push(tab,v);
      • })
      • console.dump(time.tick()-t,tab)
      • console.pause(true);


    • cyzn_lfss 2023-9-17
      0 9
      感谢光庆大佬的指教!学会了continue的用法。 通过运行时间比对,是不是说明在海量数据的运算时,少调用函数?
    • 光庆 2023-9-17
      0 10
      cyzn_lfss 感谢光庆大佬的指教!学会了continue的用法。 通过运行时间比对,是不是说明在海量数据的运算时,少调用函数?
      尽量减少代码的执行量,不必要的就跳过,节约时间。
    • cyzn_lfss 2023-9-17
      0 11
      知识多多满满干货!感谢各位大佬用心教学🌹🌹
    返回