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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序对象数组时出错无法分配给对象'[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
        })

但是我收到了这个错误,我无法解释最新情况:

TypeError:无法分配给对象'[object Array]'的只读属性'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
            })
        }
答案

因为frozen中的数组是strict mode,所以在排序之前你需要复制数组:

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

以上是关于排序对象数组时出错无法分配给对象'[object Array]'的只读属性'2'的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个对象分配给一个数组? [关闭]

尝试将对象数组传递给函数时出错

我如何根据对象标签从这个排序数组中提取碰撞数据并将该对象分配给 C# 中的目标

无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满

无法使用数组成员变量分配数组

按对象属性对 javascript 对象数组进行排序