Javascript 如何按值的和过滤对象数组
以下是我正在使用的模拟数据集:Javascript 如何按值的和过滤对象数组,javascript,typescript,Javascript,Typescript,以下是我正在使用的模拟数据集: if ( aTimesContacted > bTimesContacted ) { return 1 } if ( bTimesContacted > aTimesContacted ) { return -1 } return 0; 我试图通过每个父对象中的历史总长度来过滤模拟数据 这
if ( aTimesContacted > bTimesContacted ) {
return 1
}
if ( bTimesContacted > aTimesContacted ) {
return -1
}
return 0;
我试图通过每个父对象中的历史总长度来过滤模拟数据
这就是我的函数现在的样子:
mock = [
{
data: {
person: {
contact: {
list: [
{
history: [{...}, {...}, {...}],
type: {}
}
{
history: [{...}],
type: {}
}
]
},
asdf: {...}
},
bleh: {...}
},
something: {...}
},
{...},
{...}
]
我正确地获得了我设置的变量(aTimesContacted
,bTimesContacted
)中的接触次数,但当我记录排序数组时,没有任何更改
我这里遗漏了什么?您的报税表错误
报税表(a>b)?a-b:b-a
将始终给出一个正数(或零),如果需要反向排序,请使用返回a-b
或反向排序返回b-a
如果我只返回a-b,如何检查哪个联系得更多…?排序需要正数,零,或者将负数作为返回值,因此如果a=15
和b=6
a-b=9
则a
首先排序,反之,如果b=15
和a=6
则将-9
则b
首先排序。注a-b
我的意思是a和b是对象。。。它们不是数字。如果你真的通读了这篇文章,你会发现我首先需要计算每个用户被计数的次数。我将金额存储到变量中:aTimesContacted
和bTimesContacted
。我需要比较这两个值并对对象进行排序是的,我将名称缩短为a
和b
以节省注释中的空间,忘了提及这一点。实际上,在你的代码中,你也在错误地使用它们(即你试图对对象而不是时间进行数学运算)
function filterByContactAmount():void {
let sorted = data.sort((a:any, b:any) => {
let aTimesContacted:number = a.data.person.contact.list.reduce((acc:any, val:any) => acc + val.history.length, 0)
let bTimesContacted:number = b.data.person.contact.list.reduce((acc:any, val:any) => acc + val.history.length, 0)
return ( aTimesContacted > bTimesContacted ) ? a - b : b - a
})
setData(sorted)
}