遍历对象数组并根据多个条件对其进行过滤

我有一个包含大量重复/无用数据的对象数组。我需要根据客户 id 进行过滤并选择具有最新日期的对象。数据看起来像这样:


let data = [

  {

    CUSTOMER_PERMANENT_ID: "2495",

    EMAIL: "abs@gmail.com",

    EVENT_ACTIVATION_TIME: "2019-10-25 13:57:38.79",

  },

  {

    CUSTOMER_PERMANENT_ID: "2495",

    EMAIL: "abs@gmail.com",

    EVENT_ACTIVATION_TIME: "2019-10-28 20:04:49.016",

  },

  {

    CUSTOMER_PERMANENT_ID: "2495",

    EMAIL: "abs@gmail.com",

    EVENT_ACTIVATION_TIME: "2019-10-28 20:04:49.019",

  },

  {

    CUSTOMER_PERMANENT_ID: "5995",

    EMAIL: "John@gmail.com",

    EVENT_ACTIVATION_TIME: "2019-10-28 17:24:10.98",

  }

]

我尝试了以下功能,但它仅在有两个重复对象时才有效,如果有两个以上,则返回所有对象。


public fixDcppSelectedClientData() {

    let result = [];


    for (let item of this.arr) {

      for (let checkingItem of this.arr) {

        if (

          this.arr.indexOf(item) !=

            this.arr.indexOf(checkingItem) &&

          item.CUSTOMER_PERMANENT_ID == checkingItem.CUSTOMER_PERMANENT_ID &&

          new Date(item.EVENT_ACTIVATION_TIME).getTime() <

            new Date(checkingItem.EVENT_ACTIVATION_TIME).getTime()

        ) {

          if (result.indexOf(checkingItem) == -1) {

            result.push(checkingItem);

          }

        }

      }

    }

    console.log("filtered data is ", result);

  }

我需要更多地研究这个话题,但是如果有人能在此期间提供帮助,那就太好了。


幕布斯6054654
浏览 130回答 2
2回答

ibeautiful

let id = "2495"const query = data&nbsp; &nbsp; .filter( obj => obj.CUSTOMER_PERMANENT_ID === id )&nbsp; &nbsp; .sort( (obj1, obj2) =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; (obj1.EVENT_ACTIVATION_TIME < obj2.EVENT_ACTIVATION_TIME) ? 1 : -1&nbsp;&nbsp; &nbsp; )console.log('latest', query[0]);console.log('second to latest', query[1]);console.log('all with this id', query)

忽然笑

此代码过滤器重复 idvar newArr = data.filter((x, index, self) =>&nbsp; index === self.findIndex((t) => (&nbsp; &nbsp; t.CUSTOMER_PERMANENT_ID === x.CUSTOMER_PERMANENT_ID)));console.log(newArr);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript