итерировать массив объектов и отдельно сравнивать даты в es6 - PullRequest
2 голосов
/ 19 февраля 2020

Мне нужно сделать функцию для итерации массива объектов x, а затем сравнить дату внутри объектов и разделить ее по разным массивам, чтобы я мог отдельно показать в HTML, это мой объект:

[{"id":1,"date":"2020-02-06","value":131},{"id":2,"date":"2020-02-06","value":135},{"id":3,"date":"2020-02-06","value":141},{"id":4,"date":"2020-02-05","value":151},{"id":6,"date":"2020-02-05","value":155}]

Я хочу что-то вроде этого:

obj1 = [{"id":1,"date":"2020-02-06","value":131},{"id":2,"date":"2020-02-06","value":135},{"id":3,"date":"2020-02-06","value":141}]

obj2 = [{"id":4,"date":"2020-02-05","value":151},{"id":6,"date":"2020-02-05","value":155}]

мой код:

// global variables
json = [{
  "id": 1,
  "date": "2020-02-06",
  "value": 131
}, {
  "id": 2,
  "date": "2020-02-06",
  "value": 135
}, {
  "id": 3,
  "date": "2020-02-06",
  "value": 141
}, {
  "id": 4,
  "date": "2020-02-05",
  "value": 151
}, {
  "id": 6,
  "date": "2020-02-05",
  "value": 155
}];
obj1 = [];
obj2 = [];


for (const x of json) {
  if (x.date != x.date) {
    obj1.push(x)
  } else {
    obj2.push(x)
  }
}

console.log(obj1);
console.log(obj2);

в результате всегда предметы pu sh в obj1 ..

любая помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

Вы можете сгруппировать по дате и получить массив массивов.

var data = [{ id: 1, date: "2020-02-06", value: 131 }, { id: 2, date: "2020-02-06", value: 135 }, { id: 3, date: "2020-02-06", value: 141 }, { id: 4, date: "2020-02-05", value: 151 }, { id: 6, date: "2020-02-05", value: 155 }],
    grouped = data.reduce((r, o) => {
        var group = r.find(([{ date }]) => date === o.date);
        if (!group) r.push(group = []);
        group.push(o);
        return r;
    }, []);

console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 19 февраля 2020

Вы можете использовать reduce для создания объекта, который сопоставляет каждую уникальную дату с соответствующими элементами данных, имея в основном группу по дате:

const data = [{"id":1,"date":"2020-02-06","value":131},{"id":2,"date":"2020-02-06","value":135},{"id":3,"date":"2020-02-06","value":141},{"id":4,"date":"2020-02-05","value":151},{"id":6,"date":"2020-02-05","value":155}];

const groupedData = data.reduce((acc, curr) => ({
  ...acc,
  [curr.date]: [...(acc[curr.date] || []), curr]
}), {});

console.log(groupedData);

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

0 голосов
/ 19 февраля 2020

Типичное решение для этого - сгруппировать их по ключу и вывести их в массив. Ниже приведен пример использования Array Reduce и Object.values, чтобы передать его двум массивам.

var items = [
  {"id":1,"date":"2020-02-06","value":131},
  {"id":2,"date":"2020-02-06","value":135},
  {"id":3,"date":"2020-02-06","value":141},
  {"id":4,"date":"2020-02-05","value":151},
  {"id":6,"date":"2020-02-05","value":155}
]

var dateGroups = items.reduce( function (dates, item) {
  dates[item.date] = dates[item.date] || []
  dates[item.date].push(item)
  return dates
}, {})

var results = Object.values(dateGroups)

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