Javascript 基于条件的和列制表器

Javascript 基于条件的和列制表器,javascript,arrays,reduce,Javascript,Arrays,Reduce,我试图在制表器中用特定条件求和列值,并遵循以下步骤 到目前为止,我尝试的是: $(文档).ready(函数(){ 函数getSum(总计,num){ 返回total+num; } var adultCalc=函数(值、数据、calcParams){ var tempvalue=[]; data.forEach(函数(数据){ var count=data.age*data.qty; tempvalue.push(计数); }); log('array',tempvalue); log('tot

我试图在制表器中用特定条件求和列值,并遵循以下步骤

到目前为止,我尝试的是:

$(文档).ready(函数(){
函数getSum(总计,num){
返回total+num;
}
var adultCalc=函数(值、数据、calcParams){
var tempvalue=[];
data.forEach(函数(数据){
var count=data.age*data.qty;
tempvalue.push(计数);
});
log('array',tempvalue);
log('total',tempvalue.reduce(getSum));
/*返回值*/
}
var表格数据=[{
id:1,
姓名:“奥利·鲍勃”,
年龄:"12岁",,
数量:“1”,
dob:“
},
{
id:3,
姓名:“克里斯汀·洛博斯基”,
年龄:"42岁",,
数量:“1”,
dob:“22/05/1982”
},
{
id:4,
姓名:“布伦登飞利浦”,
年龄:"35岁",,
数量:“2”,
dob:“1980年8月1日”
},
{
id:5,
姓名:“Margret Marmajuke”,
年龄:"16岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:5,
姓名:“Marmajuke”,
年龄:"17岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:4,
名称:“飞利浦”,
年龄:"27岁",,
数量:“0”,
dob:“1980年8月1日”
}
];
var table=新制表器(“示例表”{
身高:205,
数据:tabledata,
布局:“fitColumns”,
栏目:[{
标题:“姓名”,
字段:“名称”,
宽度:150
},
{
标题:“年龄”,
字段:“年龄”,
bottomCalc:adultCalc
},
{
标题:“数量”,
字段:“数量”
},
{
标题:“出生日期”,
字段:“dob”,
分拣机:“日期”,
对齐:“居中”
}
]
});
});

您需要提供初始值以减少

console.log('total', tempvalue.reduce(getSum,0));
第一次使用reduce时,您有一个空数组,这导致reduce产生错误。您可以传递初始值,它应该按预期工作

注意:如果未提供initialValue,则reduce()将执行 从索引1开始的回调函数,跳过第一个索引。如果 如果提供initialValue,它将从索引0开始

$(文档).ready(函数(){
函数getSum(总计,num){
返回total+num;
}
var adultCalc=函数(值、数据、calcParams){
var tempvalue=[];
data.forEach(函数(数据){
var count=data.age*data.qty;
tempvalue.push(计数);
});
log('array',tempvalue);
log('total',tempvalue.reduce(getSum,0));
/*返回值*/
}
var表格数据=[{
id:1,
姓名:“奥利·鲍勃”,
年龄:"12岁",,
数量:“1”,
dob:“
},
{
id:3,
姓名:“克里斯汀·洛博斯基”,
年龄:"42岁",,
数量:“1”,
dob:“22/05/1982”
},
{
id:4,
姓名:“布伦登飞利浦”,
年龄:"35岁",,
数量:“2”,
dob:“1980年8月1日”
},
{
id:5,
姓名:“Margret Marmajuke”,
年龄:"16岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:5,
姓名:“Marmajuke”,
年龄:"17岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:4,
名称:“飞利浦”,
年龄:"27岁",,
数量:“0”,
dob:“1980年8月1日”
}
];
var table=新制表器(“示例表”{
身高:205,
数据:tabledata,
布局:“fitColumns”,
栏目:[{
标题:“姓名”,
字段:“名称”,
宽度:150
},
{
标题:“年龄”,
字段:“年龄”,
bottomCalc:adultCalc
},
{
标题:“数量”,
字段:“数量”
},
{
标题:“出生日期”,
字段:“dob”,
分拣机:“日期”,
对齐:“居中”
}
]
});
});

这样做更容易。不要忘记
数组的第二个参数(初始值)。reduce
方法

$(文档).ready(函数(){
函数getSum(总计,num){
返回total+num;
}
var adultCalc=函数(值、数据、calcParams){
返回数据.map(函数(d){
返回d.age*d.qty;
})
.reduce(getSum,0);
}
//甚至是ES6风格的
常量qtyCalc=(值、数据、calcParams)=>
data.map(d=>d.age*d.qty)
.减少((t,n)=>t+n*2,0);
var表格数据=[{
id:1,
姓名:“奥利·鲍勃”,
年龄:"12岁",,
数量:“1”,
dob:“
},
{
id:3,
姓名:“克里斯汀·洛博斯基”,
年龄:"42岁",,
数量:“1”,
dob:“22/05/1982”
},
{
id:4,
姓名:“布伦登飞利浦”,
年龄:"35岁",,
数量:“2”,
dob:“1980年8月1日”
},
{
id:5,
姓名:“Margret Marmajuke”,
年龄:"16岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:5,
姓名:“Marmajuke”,
年龄:"17岁",,
数量:“0”,
dob:“31/01/1999”
},
{
id:4,
名称:“飞利浦”,
年龄:"27岁",,
数量:“0”,
dob:“1980年8月1日”
}
];
var table=新制表器(“示例表”{
身高:205,
数据:tabledata,
布局:“fitColumns”,
栏目:[{
标题:“姓名”,
字段:“名称”,
宽度:150
},
{
标题:“年龄”,
字段:“年龄”,
bottomCalc:adultCalc
},
{
标题:“数量”,
字段:“数量”,
底部计算器:qtyCalc
},
{
标题:“出生日期”,
字段:“dob”,
分拣机:“日期”,
对齐:“居中”
}
]
});
});


你能告诉我
0
从哪里来吗?为什么
0
sir?@illuminarch当你运行我的代码片段时,你会看到数组[]为空,然后它会得到值。yap当我在本地机器上运行时,我也会看到空数组,但我认为它应该减少最后一个数组的值,而不是第一个数组(空数组)。在这种情况下,初始索引提供了
5
。我仍然不知道
0
5
是从哪里来的。@illuminarch你是谁