首页 > 解决方案 > 如何通过值的总和过滤对象数组

问题描述

if ( aTimesContacted > bTimesContacted ) {
                return 1
            }

            if ( bTimesContacted > aTimesContacted ) {
                return -1
            }

            return 0;

这是我正在使用的模拟数据集:

mock = [
  {
    data: {
      person: {
        contact: {
          list: [
            {
               history: [{...}, {...}, {...}],
               type: {}
            }
            {
               history: [{...}],
               type: {}
            }
          ]
        },
        asdf: {...}
      },
      bleh: {...}
    },
    something: {...}
  },
  {...},
  {...}
]

我正在尝试按每个父对象中的历史总长度过滤模拟数据。

这就是我的函数现在的样子:

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

我正确地获得了在我设置的变量中联系的次数(aTimesContactedbTimesContacted),但是当我记录排序数组时,没有任何改变。

我在这里想念什么?

标签: javascripttypescript

解决方案


推荐阅读