Фильтровать объекты по паре ключ-значение - PullRequest
2 голосов
/ 16 апреля 2019

У меня есть объект json как таковой

  {
      "value": "0",
      "minute": "2019-04-16T01:48",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  },
  {
      "value": "7",
      "minute": "2019-04-16T01:49",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  },
  {
      "value": "18",
      "minute": "2019-04-16T01:50",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  },
  {
      "value": "0",
      "minute": "2019-04-16T01:31",
      "action": "verb",
      "label": "noun",
      "id": "appid2"
  },
  {
      "value": "19",
      "minute": "2019-04-16T01:51",
      "action": "verb",
      "label": "noun",
      "id": "appid2"
  },
  {
      "value": "19",
      "minute": "2019-04-16T01:52",
      "action": "verb",
      "label": "noun",
      "id": "appid2"
  },
  {
      "value": "19",
      "minute": "2019-04-16T01:53",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  },
  {
      "value": "18",
      "minute": "2019-04-16T01:54",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  },
  {
      "value": "17",
      "minute": "2019-04-16T01:55",
      "action": "verb",
      "label": "noun",
      "id": "appid1"
  }

Что я хотел бы иметь, так это создать три сегмента (A, B, C). В контейнере A находятся первые три объекта appid1, в то время как в контейнере B - объекты appid2, в то время как в контейнере C - третий и последний набор объектов appid1.

Я пытался сделать что-то подобное

let startIndex = 0;
let endIndex = -1;

let currentAppID = "appid1"
        data.forEach((d, index)=> {
            if(d["label"] === 'noun' && d["id"]=== currentGameId && d["action"]==="verb") {
                startIndex = index
            }

            if(d["label"] === 'noun' && d["id"]!== currentGameId && d["event.action"]==="verb") {
                endIndex = index
            }
        })

 let bucketItems = data.slice(startIndex,endIndex)

но этот код дает мне абсурдные результаты. Можете ли вы дать мне знать, что я делаю здесь не так?

Спасибо

1 Ответ

1 голос
/ 16 апреля 2019

Вы можете уменьшить массив и проверить, имеет ли объект last и фактический объект o одинаковые id, в противном случае добавьте новую группу.

var data = [{ value: "0", minute: "2019-04-16T01:48", action: "verb", label: "noun", id: "appid1" }, { value: "7", minute: "2019-04-16T01:49", action: "verb", label: "noun", id: "appid1" }, { value: "18", minute: "2019-04-16T01:50", action: "verb", label: "noun", id: "appid1" }, { value: "0", minute: "2019-04-16T01:31", action: "verb", label: "noun", id: "appid2" }, { value: "19", minute: "2019-04-16T01:51", action: "verb", label: "noun", id: "appid2" }, { value: "19", minute: "2019-04-16T01:52", action: "verb", label: "noun", id: "appid2" }, { value: "19", minute: "2019-04-16T01:53", action: "verb", label: "noun", id: "appid1" }, { value: "18", minute: "2019-04-16T01:54", action: "verb", label: "noun", id: "appid1" }, { value: "17", minute: "2019-04-16T01:55", action: "verb", label: "noun", id: "appid1" }],
    result = data.reduce((r, o, i, { [i - 1]: last }) => {
        if (!last || o.id !== last.id) r.push([]);
        r[r.length - 1].push(o);
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...