408 Stimmen

Array.push() wenn nicht vorhanden?

Wie kann ich in ein Array schieben, wenn keine Werte vorhanden sind? Hier ist mein Array:

[
    { name: "tom", text: "tasty" },
    { name: "tom", text: "tasty" },
    { name: "tom", text: "tasty" },
    { name: "tom", text: "tasty" },
    { name: "tom", text: "tasty" }
]

Wenn ich versuchte, erneut in das Array zu schieben, entweder mit name: "tom" o text: "tasty" Ich will nicht, dass irgendetwas passiert... aber wenn keines von beidem da ist, dann will ich, dass es passiert. .push()

Wie kann ich das tun?

40voto

Ronnie Royston Punkte 13643

Etwa so?

var item = "Hello World";
var array = [];
if (array.indexOf(item) === -1) array.push(item);

Mit Objekt

var item = {name: "tom", text: "tasty"}
var array = [{}]
if (!array.find(o => o.name === 'tom' && o.text === 'tasty'))
    array.push(item)

33voto

Gopala raja naika Punkte 1659

Dynamisch schieben

var a = [
  {name:"bull", text: "sour"},
  {name: "tom", text: "tasty" },
  {name: "Jerry", text: "tasty" }
]

function addItem(item) {
  var index = a.findIndex(x => x.name == item.name)
  if (index === -1) {
    a.push(item);
  }else {
    console.log("object already exists")
  }
}

var item = {name:"bull", text: "sour"};
addItem(item);

Mit einfacher Methode

var item = {name:"bull", text: "sour"};
a.findIndex(x => x.name == item.name) == -1 ? a.push(item) : console.log("object already exists")

Wenn das Array nur primitive Typen/einfache Arrays enthält

var b = [1, 7, 8, 4, 3];
var newItem = 6;
b.indexOf(newItem) === -1 && b.push(newItem);

31voto

Eric Valero Punkte 257

Einfacher Code, wenn 'indexOf' '-1' zurückgibt, bedeutet dies, dass sich das Element nicht innerhalb des Arrays befindet und die Bedingung '=== -1' wahr/falsch abruft.

Der Operator "&&" bedeutet "und", d. h. wenn die erste Bedingung erfüllt ist, wird sie in das Array eingefügt.

array.indexOf(newItem) === -1 && array.push(newItem);

27voto

Ronen Rabinovici Punkte 7908

Verwenden Sie eine js-Bibliothek wie unterstrich.js aus genau diesen Gründen. Verwendung: union: Berechnet die Vereinigung der übergebenen Arrays: die Liste der eindeutigen Elemente in der Reihenfolge, die in einem oder mehreren der Arrays vorhanden sind.

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2, 3, 101, 10]

24voto

giraffesyo Punkte 4304

Ich würde vorschlagen, dass Sie eine Satz ,

Sets lassen nur eindeutige Einträge zu, womit Ihr Problem automatisch gelöst ist.

Sets können wie folgt deklariert werden:

const baz = new Set(["Foo","Bar"])

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X