对对象数组进行排序时出错无法分配给对象“\[object Array\]”的只读属性“2”

新手上路,请多包涵

我有对象数组,其中对象看起来像这样(值更改):

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

我想按速度降序排列它们:

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

但是我收到了这个错误,我无法真正理解发生了什么:

类型错误:无法分配给对象“[对象数组]”的只读属性“2”

我错过了什么?

编辑:redux 存储中的对象数组:

 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
            })
        }

原文由 MazMat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 335
2 个回答

因为数组在 strict mode 中被 冻结,所以你需要在排序之前复制数组:

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

原文由 Patrick Roberts 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题