JavaScript实现国际象棋应用中对象元素按值排序
解决JavaScript对象按值排序的问题
首先要明确:JavaScript的普通对象没有sort()方法,直接调用Moves.sort()会报错。要实现按值排序,得先把对象转换成键值对数组,排序后再按需处理。
具体步骤:
将对象转为键值对数组
使用Object.entries()方法,把对象的每个键值对转成数组元素,格式为[键名, 值]:const Moves = {e7e5: '-42', g8f6: '-16', h7h6: '-38', c8d7: '-29'}; const movesEntries = Object.entries(Moves); // 转换后movesEntries的值: // [["e7e5", "-42"], ["g8f6", "-16"], ["h7h6", "-38"], ["c8d7", "-29"]]对数组按值排序
因为值是字符串类型的数字,排序时要先转成数值类型,否则字符串比较会出错(比如'-42'字符串比'-16'大,但数值上-42 < -16)。- 升序排序(从小到大):
movesEntries.sort((a, b) => parseInt(a[1], 10) - parseInt(b[1], 10)); - 降序排序(从大到小):
movesEntries.sort((a, b) => parseInt(b[1], 10) - parseInt(a[1], 10));
这里的
a[1]和b[1]就是数组元素中的值(对应原对象的属性值),替代你代码里的??部分。- 升序排序(从小到大):
可选:转回对象
如果需要保留对象格式,用Object.fromEntries()把排序后的数组转回对象:const sortedMoves = Object.fromEntries(movesEntries); // 升序后的sortedMoves: // {e7e5: "-42", h7h6: "-38", c8d7: "-29", g8f6: "-16"}
完整示例代码:
const Moves = {e7e5: '-42', g8f6: '-16', h7h6: '-38', c8d7: '-29'}; // 转数组并升序排序 const sortedEntries = Object.entries(Moves).sort((a, b) => parseInt(a[1], 10) - parseInt(b[1], 10)); // 转回对象 const sortedMoves = Object.fromEntries(sortedEntries); console.log(sortedMoves);
内容的提问来源于stack exchange,提问作者Cymro
相关产品推荐
相关产品推荐

