Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linq.js在javascript中按对象数组分组_Javascript_Linq_Linq.js - Fatal编程技术网

linq.js在javascript中按对象数组分组

linq.js在javascript中按对象数组分组,javascript,linq,linq.js,Javascript,Linq,Linq.js,我想使用linq.js按日期对以下数据进行分组 data2=[{ “日期”:1399298400.0, “adId”:1057946139383, “印象”:1000000 }, { “日期”:1399298400.0, “adId”:3301784671323, “印象”:535714 }……等等。 ]; 以下是我的尝试: var linq=Enumerable.From(数据2); data2=linq.GroupBy(函数(x){ 返回x.date; }).选择(功能(x){ 返回{

我想使用linq.js按日期对以下数据进行分组

data2=[{
“日期”:1399298400.0,
“adId”:1057946139383,
“印象”:1000000
}, {
“日期”:1399298400.0,
“adId”:3301784671323,
“印象”:535714
}……等等。
]; 
以下是我的尝试:

var linq=Enumerable.From(数据2);
data2=linq.GroupBy(函数(x){
返回x.date;
}).选择(功能(x){
返回{
日期:x.Key(),
印象:x.Sum(函数(y){
返回y.impressions | 0;
})
};
}).ToArray();
但是,它不能正常工作,因为
GroupBy
之前和之后的所有
impressions
的总和很接近,但并不相同

在这种情况下,在linq.js中使用groupby的正确方法是什么

这里有一个完整的数据集,它可以在使用
GroupBy
之前和之后提醒总印象

解决方案 您可以通过以下方式将回调作为第三个参数传递:

jinqJs().from(data2).groupBy('date').sum('impressions').select();
var group=Enumerable.from(dataArray).groupBy(“$.person”),null,(key,g)=>{
返回{
人:钥匙,,
likes:g.sum($.likes | 0)
}
}).toArray()
解释 在
groupBy
中,第三个参数允许您在发出之前修改结果:

在JS中,(单个管道
|
)返回第一个值(如果存在),否则返回第二个值。如果没有它,尝试将未定义的值与实值求和将返回

如果没有
|0
,结果将如下所示:

jinqJs().from(data2).groupBy('date').sum('impressions').select();

本例使用速记语法,但如果您愿意在任何时候看到带美元符号的字符串,可以用lambda语法替换它,如下所示(它们的作用完全相同):


我是开源项目的作者。在jinqJs中,您可以轻松做到这一点,如下所示:

jinqJs().from(data2).groupBy('date').sum('impressions').select();

如果我还能帮上忙,请告诉我。

您可以尝试按日期分组。toString()。由于JS的评估方式,可能会更安全。或者,遇到这个问题的人可能对使用linq.JS没有多少认同

如果您已经开始使用它,那么就开始吧,但是如果这是它的第一对真正的用例,那么值得注意的是,您可以在vanilla js中完成同样的事情:

对于此数据:

var数据数组=[
{人:“詹姆斯”,喜欢:100},
{人物:“詹姆斯”,喜欢:250},
{人:“凯尔”,喜欢:300},
{人:“凯尔”}
];
您可以使用每个关键点/人物的属性构建一个对象,并不断对这些道具的值求和

var obj=dataArray.reduce((acc,cur)=>{
acc[cur.person]=(acc[cur.person]| | 0)+(cur.likes | | 0)
返回acc
}, {})
如果希望它是一个对象数组,可以像这样从一个对象转换为一个数组

var数组=Object.entries(obj.map)(entry=>{
返回{person:entry[0],likes:entry[1]}
})

在我看来,
|0
是问题的根源。我从另一个stackoverflow帖子复制了这个代码。
|0
到底是做什么的?我应该是
|
而不是
|
,这意味着如果表达式左侧的对象是
null
则返回右侧的值,即
0
。出于好奇,那么,``会做什么呢?