1. ホーム
  2. javascript

[解決済み] オブジェクトの配列をソートする際のエラー オブジェクト'[オブジェクト配列]'の読み取り専用プロパティ'2'に割り当てられない

2022-09-06 04:20:23

質問

以下のようなオブジェクトの配列を持っています(値は変更されます)。

   {
     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: Cannot assign to read only property '2' of object '[object Array]'.

何が足りないのでしょうか?

編集してください。 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
            })
        }

どのように解決するのですか?

配列が 凍結 ストリクトモード の場合、ソートする前に配列をコピーする必要があります。

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