Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript 如何按值的和过滤对象数组_Javascript_Typescript - Fatal编程技术网

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)
    }