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

cyzn_lfss 8月前 548

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 8月前
    1 2
    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 8月前
    0 3
    aarman var tab={}; table.filter(temptab,function(v,index){ var flag=1; table.filter( ...
    膜拜大佬!谢谢大佬!!
  • netfox 8月前
    0 4

  • cyzn_lfss 8月前
    0 5
    用是用上了。还很好用👍 但技巧没有学会😂
  • aarman 8月前
    1 6
    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 8月前
    0 7

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

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

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

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

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

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