Ошибка при сортировке массива объектов. Невозможно назначить только для чтения свойство «2» объекта «[массив объектов]». - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть массив объектов, где объект выглядит следующим образом (значения меняются):

   {
     stats: {
        hp: 2,
        mp: 0,
        defence: 4,
        agility: 11,
        speed: 6,
        strength: 31
     }
   }

Я хочу отсортировать их по убыванию по скорости, выполнив:

  array.sort((a, b) => {
            return b.stats.speed - a.stats.speed
        })

Однако я получаю эту ошибку и не могу расшифровать, что происходит:

TypeError: Невозможно назначить только для чтения свойство '2' объекта '[массив объекта]'

Чтоя пропускаю?

Редактировать: Массив объекта в хранилище редуксов:

const enemyDefaultState = [
{
    name: 'European Boy1',
    stats: {
        hp: 2,
        mp: 0,
        defence: 4,
        agility: 11,
        speed: 6,
        strength: 31
    }
},
{
    name: 'European Boy2',
    stats: {
        hp: 2,
        mp: 0,
        defence: 4,
        agility: 4,
        speed: 2,
        strength: 31
    }
},
{
    name: 'European Boy3',
    stats: {
        hp: 2,
        mp: 0,
        defence: 4,
        agility: 7,
        speed: 7,
        strength: 31
    }
},

]

Я импортирую массив и назначаю его переменной:

 let enemies = getState().enemy;
        if (enemies) {
            //sort by speed stat
            enemies.sort((a, b) => {
                return b.stats.speed - a.stats.speed
            })
        }

Ответы [ 2 ]

0 голосов
/ 19 августа 2019

Причина, как заявил Патрик, в том, что массив заморожен.Таким образом, любой метод копирования массива будет работать, например, тот, который он предлагает.

array = array.slice().sort((a, b) => b.stats.speed - a.stats.speed)

Я просто хочу добавить, что причина , в которой массив замороженваш случай заключается в том, что использование массива в качестве реквизита из хранилища редуксов и реквизита в React является неизменным, и, следовательно, вы не можете изменять массив.

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

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

array = array.slice().sort((a, b) => b.stats.speed - a.stats.speed)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...