JS indexOf массив объектов и splice () не удаляют правильный объект - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть массив таких объектов:

"followers": [
        {
            "id": "1be87842-2f7f-4e3b-8fde-9a998feb3a01",
            "bug_id": "4ae2707b-07ef-4e07-95da-77855c67fece",
            "user_id": "e9e81aa2-4994-483d-a3a7-3b88491f1fda",
            "username": "texample1",
            "name": "Test Example1",
            "created_at": "2018-11-27 21:01:42",
            "updated_at": "2018-11-27 21:01:42",
            "deleted_at": null
        },
        {
            "id": "7bd1fa5f-4109-4beb-b53a-fb03a1d23536",
            "bug_id": "4ae2707b-07ef-4e07-95da-77855c67fece",
            "user_id": "e9e81aa2-4994-483d-a3a7-3b88491f1fda",
            "username": "texample1",
            "name": "Test Example2",
            "created_at": "2018-11-27 21:01:48",
            "updated_at": "2018-11-27 21:01:48",
            "deleted_at": null
        }
    ]

, и я пытаюсь удалить один объект по его индексу со следующим кодом в моем хранилище vuex:

  let followersArray = state.bugs.find(b => b.id === follower.bug_id).followers
  let index = followersArray.indexOf(follower)
  followersArray.splice(index, 1)

Я передаю весь объект-последователь этой мутации, затем нахожу массив последователей на объекте ошибки, нахожу индекс и пытаюсь склеить его из массива объектов-последователей объекта полной ошибки.Этот код удаляет другого последователя из ошибки.Индекс регистрируется как -1, и он должен быть 1. Кто-нибудь видит, что мне здесь не хватает?Если бы я мог получить правильный индекс, я бы добавил туда if(index !== -1)).

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Если вы выводите результат followArray в консоли, что он показывает?Если im правильным, find возвращает массив, даже если это всего 1 элемент, попробуйте с этим

let followersArray = state.bugs.find(b => b.id === follower.bug_id).followers[0]
0 голосов
/ 28 ноября 2018

Вы можете использовать функцию findIndex() и возвращать индекс последователя на основе его идентификатора:

      let index = followersArray.findIndex(i => i.id === follower.id);

Пример :

let items = [{
  name: "aaa"
}, {
  name: "bbb"
}, {
  name: "ccc"
}];
let c = {
  name: "ccc"
};
let index = items.findIndex(item => item.name === c.name)

console.log(index)
0 голосов
/ 28 ноября 2018

Когда вы запускаете этот код, и он возвращает -1:

let index = followersArray.indexOf(follower);

, что означает, что объект follower не содержится в followersArray.followersArray, скорее всего, содержит копию объекта follower, а не ссылку на тот же объект.

Даже если объект follower имеет те же атрибуты и значения атрибутов, что и объект в followersArray[1], indexOf вернет -1, если они не являются одним и тем же точным объектом.

Теперь, если вы просто хотите найти объект в массиве с соответствующим значением атрибута (например, id), вы можете использовать map или findIndex, чтобы сделать это:

let index = followersArray.map(i => i.id).indexOf(follower.id);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...