Ich habe 2 Arrays

var array1 = ["1", "2", "3", "4", "5", "6"]

Und

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offid: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
]

Ich muss zwei Arrays mit den Werten von offId vergleichen und das resultierende Array sollte sein

var array3 = [
  { offId: "1", offname: "one" },
  { offId: "2", offname: "" },
  { offId: "3", offname: "three" },
  { offId: "4", offname: "four" },
  { offId: "5", offname: "" },
  { offId: "6", offname: "" },
]

Wie könnte ich das erreichen (Länge des Arrays kann gleich oder unterschiedlich sein)

1
HKI345 19 Apr. 2018 im 20:16

3 Antworten

Beste Antwort

Sie können eine Map und verwenden Sie entweder das gespeicherte Objekt oder ein neues Objekt.

var array1 = ["1", "2", "3", "4", "5", "6"],
    array2 = [{ offId: "4", offname: "four" }, { offId: "9", offname: "nine" }, { offId: "15", offname: "fifteen" }, { offId: "3", offname: "three" }, { offId: "1", offname: "one" }, { offId: "0", offname: "zero" }, { offId: "8", offname: "eight" }, { offId: "10", offname: "ten" }],
    map = array2.reduce((m, o) => m.set(o.offId, o), new Map),
    result = array1.map(offId => map.get(offId) || { offId, offname: '' });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
Nina Scholz 19 Apr. 2018 im 17:36
var array1 = ["1", "2", "3", "4", "5", "6"];

var array2 = [
  { offId: "4", offname: "four" },
  { offId: "9", offname: "nine" },
  { offId: "15", offname: "fifteen" },
  { offId: "3", offname: "three" },
  { offId: "1", offname: "one" },
  { offId: "0", offname: "zero" },
  { offId: "8", offname: "eight" },
  { offId: "10", offname: "ten" },
];

var array3 = array1.map(val => array2.filter(obj => obj.offId == val)[0] || { offId: val, offname: "" });

console.log(array3);
2
Nishant Dixit 19 Apr. 2018 im 17:27

Der einfachste Weg wäre, einfach filter() das zweite Array:

const array3 = array2.filter(v => array1.includes(v.offId));

Dadurch werden alle Elemente in array2 durchlaufen und nur diejenigen belassen, deren offId in array1 enthalten sind.

Wenn Sie es sortieren müssen, fügen Sie am Ende einfach eine Sortierung hinzu:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => b.offId > a.offId ? 1 : a.offId < b.offId ? -1 : 0);

Wenn Sie es numerisch sortieren müssen (d. H. Sie möchten 2 vor 10), müssen Sie die Werte dieser Werte umwandeln, aber dann können Sie sie einfach subtrahieren:

const array3 = array2.filter(v => array1.includes(v.offId))
  .sort((a, b) => parseInt(b.offId) - parseInt(a.offId));
1
samanime 19 Apr. 2018 im 17:24