Ich muss eine Funktion erstellen, um ein Array von x Objekten zu iterieren, dann das Datum innerhalb der Objekte vergleichen und in verschiedenen Arrays trennen, damit ich im HTML separat anzeigen kann. Dies ist mein Objekt:

[{"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}]

Ich möchte so etwas:

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

Mein Code:

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

Im Ergebnis schieben sich immer die Gegenstände in das Objekt.

Jede Hilfe ist willkommen.

1
Jordan Quiroz 19 Feb. 2020 im 22:43

3 Antworten

Beste Antwort

Die typische Lösung hierfür besteht darin, sie nach der Taste zu gruppieren und in ein Array zu verschieben. Unten sehen Sie ein Beispiel mit Array Reduce und Object.values, um es auf die beiden Arrays zu reduzieren.

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)
0
epascarello 19 Feb. 2020 im 19:50

Sie könnten nach Datum gruppieren und eine Reihe von Arrays erhalten.

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; }
2
Nina Scholz 19 Feb. 2020 im 19:50