排序对象数组时出错无法分配给对象'[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# 中的目标