Как я могу получить индекс объекта в массиве, используя угловой? - PullRequest
4 голосов
/ 21 ноября 2019

Мне нужно иметь индекс объекта в массиве, чтобы я мог удалить эту часть массива. Я попытался использовать это:

var index = this.urenRegistratie.indexOf(newDatum);

Но он продолжает возвращать -1, и я не знаю, почему это происходит.

это часть кода, которую я имею. он получает данные из формы в html и помещает их в мой массив, теперь у меня уже есть готовая инструкция if (exisitingDatum), мой код должен быть там. Может кто-нибудь помочь мне немного?

 store(newValue:number, newDatum, newAanwezig, newComment){
    const existingDatum = this.urenRegistratie.find(billable => {
      return billable.datum === newDatum;
      return
    });

    if (!existingDatum) {
        let billable = new BillableHours();
        billable.datum = newDatum;
        billable.hours = +newValue;
        billable.aanwezig = newAanwezig;
        billable.comment = newComment;

        if(billable.aanwezig == "Aanwezig" && billable.hours !== 0 && billable.datum !== null) {
          this.urenRegistratie.push(billable);
        }
    }

    if(existingDatum) {

    }

  }

Ответы [ 3 ]

4 голосов
/ 21 ноября 2019

Как говорит mdn:

Метод findIndex () возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной функции тестирования. В противном случае он возвращает -1, указывая, что ни один элемент не прошел тест.

Если у вас есть массив подобных объектов, попробуйте использовать findIndex:

const a = [
{ firstName: "Adam", LastName: "Howard" },
{ firstName: "Ben", LastName: "Skeet" },
{ firstName: "Joseph", LastName: "Skeet" }];

index = a.findIndex(x => x.LastName === "Skeet");

console.log(index);
2 голосов
/ 21 ноября 2019

Добавление к ответу @StepUp (и, пожалуйста, выберите его ответ как лучший, так как он отвечает на вопрос очень сильно):

Нахождение индекса не связано с Angular, это скорее Vanilla JavaScript.

В вашем случае вам нужна функция, которая имеет в качестве параметра newDatum «иголку» для поиска в массиве «стог сена» с использованием findIndex :

var getNewDatumIndex = (array, newDatumNeedle) => {
  return array.findIndex(x => x.newDatum === newDatumNeedle); 
}

Вы также можете добавить метод в прототип массива, если хотите, чтобы пропустить первый аргумент:

Array.prototype.getNewDatumIndex = (newDatumNeedle) => {
  return this.findIndex(x => x.newDatum === newDatumNeedle); 
}
0 голосов
/ 21 ноября 2019

Простое и элегантное решение - использовать _. IsEqual , который выполняет глубокое сравнение с использованием lodash библиотеки

Npm Package - https://www.npmjs.com/package/lodash

const a = [
   { firstName: "Adam", LastName: "Howard" },
   { firstName: "Ben", LastName: "Skeet" },
   { firstName: "Joseph", LastName: "Skeet" }
];
const find =  { firstName: "Joseph", LastName: "Skeet" }

index = a.findIndex(x => _.isEqual(x, find));

console.log(index);
...