webentwicklung-frage-antwort-db.com.de

Lodash, um herauszufinden, ob die Objekteigenschaft im Array vorhanden ist

Ich habe eine Reihe von Objekten wie diese:

[ {"name": "Apple", "id": "Apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]

Ich möchte ein anderes Element einfügen, auch Apple genannt. Da ich jedoch keine Duplikate darin haben möchte. Wie kann ich mit lodash feststellen, ob sich bereits ein Objekt im Array mit demselben Namen befindet? 

7
reectrix

Dies hat bei mir funktioniert (nachdem ich die verschiedenen Lösungen getestet hatte): 

  addItem(items, item) {
    let foundObject = _.find(items, function(e) {
      return e.value === item.value;
    });

    if(!foundObject) {
      items.Push(item);
    }
    return items;
  }
2
reectrix

Sie können Lodash _.find() so verwenden.

var data = [ {"name": "Apple", "id": "Apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]

if(!_.find(data, {name: 'Apple'})) {
  data.Push({name: 'Apple2'});
}
console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

15
Nenad Vracar

Das ist Formular

_.has(object, path)

Beispiel:

const countries = { country: { name: 'Venezuela' } }
const isExist = _.has(countries, 'country.name')
// isExist = true

Weitere Informationen Document Lodash

6
Alex Quintero

Sie können Array.prototype.find() oder lodash's _.find() verwenden:

const addItem = (arr, item) => {
  if(!arr.find((x) => x.name === item.name)) { // you can also change `name` to `id`
    arr.Push(item);
  }
};

const arr = [ 
  {"name": "Apple", "id": "Apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
];

addItem(arr, { "name": "Apple", "id": "Apple_0" });

addItem(arr, { "name": "pear", "id": "pear_3" });

console.log(arr);

Und eine etwas kürzere, aber weniger lesbare Version:

    const addItem = (arr, item) => arr.find((x) => x.name === item.name) || arr.Push(item); // you can also change `name` to `id`

    const arr = [ 
      {"name": "Apple", "id": "Apple_0"}, 
      {"name": "dog",   "id": "dog_1"}, 
      {"name": "cat", "id": "cat_2"}
    ];

    addItem(arr, { "name": "Apple", "id": "Apple_0" });

    addItem(arr, { "name": "pear", "id": "pear_3" });

    console.log(arr);

4
Ori Drori

Hier ist ein anderes Beispiel mit lodash

var a = [ {"name": "Apple", "id": "Apple_0"}, 
  {"name": "dog",   "id": "dog_1"}, 
  {"name": "cat", "id": "cat_2"}
]

var b = _.find(a, ['name', "Apple2"]);

if(_.isObject(b)){
  console.log('exists')
}else{
    console.log('insert new')
}

https://jsfiddle.net/jorge182/s4og07jg/

2
Jorge Mejia

Wenn Sie nur einen Wert in das Array einfügen möchten, könnte _.find eine Option sein. Wenn Sie jedoch Interesse haben, eine oder mehrere davon einzufügen, würde ich stattdessen die Verwendung von _.unionBy vorschlagen:

var currentArr = [{
    "name": "Apple",
    "id": "Apple_0"
  }, {
    "name": "dog",
    "id": "dog_1"
  }, {
    "name": "cat",
    "id": "cat_2"
  }],
  arrayOneValue = [{
    "name": "Apple",
    "id": "Apple_0"
  }],
  arrayTwoValues = arrayOneValue.concat({
    "name": "lemon",
    "id": "lemon_0"
  })

console.log(_.unionBy(currentArr, arrayOneValue, 'name'));
console.log(_.unionBy(currentArr, arrayTwoValues, 'name'));
// It also allow you to perform the union using more than one property
console.log(_.unionBy(currentArr, arrayTwoValues, 'name', 'id'));
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>

0
acontell

Es gibt drei Möglichkeiten, dies mit lodash4.17.5 zu erreichen:

Angenommen, Sie möchten das Objekt entry zu einem Array von Objekten numbers hinzufügen, nur wenn entry noch nicht vorhanden ist.

let numbers = [
    { to: 1, from: 2 },
    { to: 3, from: 4 },
    { to: 5, from: 6 },
    { to: 7, from: 8 },
    { to: 1, from: 2 } // intentionally added duplicate
];

let entry = { to: 1, from: 2 };

/* 
 * 1. This will return the *index of the first* element that matches:
 */
_.findIndex(numbers, (o) => { return _.isMatch(o, entry) });
// output: 0


/* 
 * 2. This will return the entry that matches. Even if the entry exists
 *    multiple time, it is only returned once.
 */
_.find(numbers, (o) => { return _.isMatch(o, entry) });
// output: {to: 1, from: 2}


/* 
 * 3. This will return an array of objects containing all the matches.
 *    If an entry exists multiple times, if is returned multiple times.
 */
_.filter(numbers, _.matches(entry));
// output: [{to: 1, from: 2}, {to: 1, from: 2}]


/* 
 * 4. This will return `true` if the entry exists, false otherwise.
 */
_.some(numbers, entry);
// output: true

Wenn Sie eine Boolean zurückgeben möchten (d. H. Vorausgesetzt, Sie verwenden _.some() nicht), können Sie im ersten Fall einfach den zurückgegebenen Indexwert überprüfen:

_.findIndex(numbers, (o) => { return _.isMatch(o, entry) }) > -1;
// output: true

Lodash Dokumentation ist eine großartige Quelle für Beispiele und Experimente.

0
Mihai