JS 算法题

138 阅读1分钟
  题目描述
                小明今年升学到了小学一年级,
                来到新班级后,发现其他小朋友身高参差不齐,
                然后就想基于各小朋友和自己的身高差,对他们进行排序,
                请帮他实现排序

            输入描述
                第一行为正整数H和N
                0 < H < 200 为小明的身高
                0 < N < 50 为新班级其他小朋友个数
                第二行为N个正整数
                H1 ~ Hn分别是其他小朋友的身高
                取值范围0 < Hi < 200
                且N个正整数各不相同

            输出描述
                输出排序结果,各正整数以空格分割
                和小明身高差绝对值最小的小朋友排在前面
                和小明身高差绝对值最大的小朋友排在后面
                如果两个小朋友和小明身高差一样
                则个子较小的小朋友排在前面
js
复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var h = 100 // 小明的身高
        var n = 10  // 其他同学的数量
        var arr = [95, 96, 97, 98, 99, 101, 102, 103, 104, 105] // 其他同学的身高组成的数组

        function qwe(xmHeight, heightArr) {
            // 1. 创建一个包含身高差和身高的数组
            var diffHeightArr = heightArr.map(function (item) {
                return {
                    height: item,
                    diff: Math.abs(item - xmHeight)
                }
            })

            // 2. 对数组进行一个排序
            diffHeightArr.sort(function (a, b) {
    
                //先对 升高差绝对值相等 数据 进行排序
                if (a.diff === b.diff) {
                    return a.height - b.height
                }

                return a.diff - b.diff
            })
            
            return diffHeightArr.map(function (item) {
                return item.height
            }).join(' ')
        }

        var res = qwe(100, arr)
        console.log(res)    // 99 101 98 102 97 103 96 104 95 105
    </script>
</body>

</html>