【问题标题】:Grouping JavaScript array with sum用 sum 对 JavaScript 数组进行分组
【发布时间】:2018-03-29 03:47:24
【问题描述】:
[ 

{t_id :"1",  val1 : "1" ,   title:"cash to purchase",   unit :"bag"},

{t_id :"1"  ,val1 : "1" ,  title:"cash to purchase", unit :"bag"}

{t_id :"1",val1 : "1" , title:"cash to purchase", unit :"bag"}

{t_id :"2",val1 : "4" , title:"offload", unit :"bag"},

{t_id :"2",val1 : "5" , title:"onroad", unit :"bag"},

{t_id :"3", val1 : "5" , title:"Onroad", unit :"bag"},

{t_id :"3", val1 : "6" , title:"Onroad", unit :"bag"},

]

我想按 t_id 分组,并根据每个 t_id 找到 val1 的总和,然后将 val1 除以 t_id 的总数 .... 例如:数组中有三个 t-id 1,总和是三个 t_id是 3(val1)..所以 val1 必须是 3/total t_id( 即 3/3)...

然后我想在我的 HTML 上输出

标题:现金购买

包:1(即(3/3)

标题:卸载

包:4.5(即 9/2)

标题:在路上

bag:5.5(即 11/2)...2 是总 t_id

【问题讨论】:

  • 在这里也添加 JavaScript 代码

标签: javascript arrays


【解决方案1】:

这样做:

var array = [{t_id:"1",val1:"1",title:"cash to purchase",unit:"bag"},{t_id:"1",val1:"1",title:"cash to purchase",unit:"bag"},{t_id:"1",val1:"1",title:"cash to purchase",unit:"bag"},{t_id:"2",val1:"4",title:"offload",unit:"bag"},{t_id:"2",val1:"5",title:"onroad",unit:"bag"},{t_id:"3",val1:"5",title:"Onroad",unit:"bag"},{t_id:"3",val1:"6",title:"Onroad",unit:"bag"}];


var grouped = [];

array.forEach(function(o) {
  var count = 0;
  if (!this[o.t_id]) {
    this[o.t_id] = {
      t_id: o.t_id,
      val1: 0,
      title: o.title,
      counter: count
    };
    grouped.push(this[o.t_id]);
  }
  this[o.t_id].val1 += Number(o.val1);
  this[o.t_id].counter += Number(++count);
}, Object.create(null));

console.log(grouped);

现在在 HTML 中显示如下:Bag: {{result.val1/result.counter}}

【讨论】:

  • 不完全是..请将 val1 与计数器相除,即 ....in t_id 1 val1 必须为 3...(val1/totalnumberof t_id)...
  • @Arjun Ramdas,你检查我的答案了吗?
  • 这里的计数器是t_id 的数量。 t_id : 1 是 3 次,所以计数器运行了 3 次。这将工作
  • @ArjunRamdas,太好了。如果还没有完成,请点赞。
  • @ArjunRamdas,还有一件事,请学习一点关于如何使用 Stackoverflow 的知识,即如何提出问题,并且有问题总是添加你的努力或你所做的任何研究。在未来的职业生涯中,Stackoverflow 也会为您提供很多帮助。
【解决方案2】:

我不知道下面的脚本是否适合你,但输出是你想要的。

var sources = [
{t_id: "1", val1: "1", title: "cash to purchase", unit: "bag"},
{t_id: "1", val1: "1", title: "cash to purchase", unit: "bag"},
{t_id: "1", val1: "1", title: "cash to purchase", unit: "bag"},
{t_id: "2", val1: "4", title:"offload", unit :"bag"},
{t_id: "2", val1: "5", title:"onroad", unit :"bag"},
{t_id: "3", val1: "5", title:"Onroad", unit :"bag"},
{t_id: "3", val1: "6", title:"Onroad", unit :"bag"}
];

var groups = {};
for(var i in sources){
	var source = sources[i];
	if(typeof groups[source.t_id] !== 'undefined'){
    	groups[source.t_id].sum_of_val1 += Number(source.val1);
    	groups[source.t_id].num_of_items += 1;
    }else{
    	groups[source.t_id] = source;
        groups[source.t_id].sum_of_val1 = Number(source.val1);
    	groups[source.t_id].num_of_items = 1;
    }
}

// print out put
for(var i in groups){
	var group = groups[i];
	
    document.write("Title: " + group.title + "<br/>Bag: " + (group.sum_of_val1 / group.num_of_items) + " (ie.: " + group.sum_of_val1 + " / " + group.num_of_items+ ")<br/><br/>");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-12
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多