Перебирать массив объектов и фильтровать его на основе нескольких условий - PullRequest
0 голосов
/ 17 июня 2020

У меня есть массив объектов, содержащий много повторяющихся / бесполезных данных. Мне нужно отфильтровать по идентификатору клиента и выбрать объект с самой последней датой. Данные выглядят примерно так:

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

Мне нужно больше изучить этот topi c, однако, если кто-нибудь может помочь тем временем, было бы здорово.

С уважением

Ответы [ 2 ]

1 голос
/ 17 июня 2020
let id = "2495"
const query = data
    .filter( obj => obj.CUSTOMER_PERMANENT_ID === id )
    .sort( (obj1, obj2) => 
        (obj1.EVENT_ACTIVATION_TIME < obj2.EVENT_ACTIVATION_TIME) ? 1 : -1 
    )

console.log('latest', query[0]);
console.log('second to latest', query[1]);
console.log('all with this id', query)
0 голосов
/ 17 июня 2020

этот фильтр кода дублирует id

var newArr = data.filter((x, index, self) =>
  index === self.findIndex((t) => (
    t.CUSTOMER_PERMANENT_ID === x.CUSTOMER_PERMANENT_ID)));

console.log(newArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...