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?

3voto

VivaLaPanda Punkte 771

Ich habe Map and Reduce verwendet, um dies in dem Fall zu tun, in dem Sie nach einer bestimmten Eigenschaft eines Objekts suchen möchten, was nützlich ist, da eine direkte Objektgleichheit oft fehlschlägt.

var newItem = {'unique_id': 123};
var searchList = [{'unique_id' : 123}, {'unique_id' : 456}];

hasDuplicate = searchList
   .map(function(e){return e.unique_id== newItem.unique_id})
   .reduce(function(pre, cur) {return pre || cur});

if (hasDuplicate) {
   searchList.push(newItem);
} else {
   console.log("Duplicate Item");
}

3voto

docta_faustus Punkte 1885

Für den Fall, dass Sie etwas Einfaches brauchen, ohne den Array-Prototyp erweitern zu wollen:

// Example array
var array = [{id: 1}, {id: 2}, {id: 3}];

function pushIfNew(obj) {
  for (var i = 0; i < array.length; i++) {
    if (array[i].id === obj.id) { // modify whatever property you need
      return;
    }
  }
  array.push(obj);
}

2voto

TheeCodeDragon Punkte 97

Ich schätze, ich bin zu spät, um hier zu antworten, aber das ist, was ich schließlich für einen Mailmanager, den ich geschrieben habe, entwickelt habe. Funktioniert, das ist alles, was ich brauche.

window.ListManager = [];
$('#add').click(function(){
//Your Functionality
  let data =Math.floor(Math.random() * 5) + 1 

  if (window.ListManager.includes(data)){
      console.log("data exists in list")
  }else{
       window.ListManager.push(data);
  }

  $('#result').text(window.ListManager);
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>Unique List</h1>

<p id="result"></p>
<button id="add">Add to List</button>

2voto

Julio Peguero Punkte 132

A ist die Anordnung der Objekte, die Sie haben

a.findIndex(x => x.property=="WhateverPropertyYouWantToMatch") <0 ? 
a.push(objectYouWantToPush) : console.log("response if object exists");

2voto

Vasilii Suricov Punkte 665

Ich würde es vorziehen, native js zu verwenden Array.prototype.some() auch in jQ env
Dokumente: w3s some o mdn some

let arr = [
    { name: "tom", text: "tasty" },
    { name: "tom", text: "tasty" }
];
let oneMore = { name: "tom", text: "tasty" };
!arr.some(i => i.name == oneMore.name && i.text == oneMore.text)
  && arr.push(oneMore);

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