根据与 x 的绝对差重新排列数组元素。例如,具有最小差异的元素排在第一位,依此类推。就像我在服用 数组 [10、5、3、9、2、3] 和 x = 7 ,则每个元素的绝对差应为=
7 - 10 = 3(abs)
7 - 5 = 2
7 - 3 = 4
7 - 9 = 2(abs)
7 - 2 = 5
7 - 3 = 4
因此,根据与X的不同,元素按 [5,9,10,3,3,2] 排列。
我已经通过下面的代码尝试过此操作,但仍然失败:
function ar(a, x) {
var obj = {}, d, i, res;
for (i = 0; i < a.length; i++) {
d = Math.abs(a[i] - x);
obj[a[i]] = d;
}
res = Object.keys(obj).sort(function(a, b) {
return obj[a] - obj[b]
});
for (i = 0; i < res.length; i++) {
res[i] = parseInt(res[i]);
}
return res;
}
var o = ar([10, 5, 3, 9, 2, 3], 7);
console.log(o);
如您所见,我正在制造仅具有一个键但在此处重复值的对象..我找不到解决它的另一种方法,我得到的答案是 [5,9,10,3, 2] :(..
答案 0 :(得分:3)
如您所见,我正在制作仅具有一个键但具有值的对象 在这里重复
对象不能具有重复的属性,因此当您重复一个属性时,它会用新值覆盖前一个属性
您可以简单地使用Math.abs
let arr = [10, 5, 3, 9, 2, 3]
let x = 7
let sortByDiff = (arr,x) => arr.sort((a,b)=> Math.abs(a-x) - Math.abs(b-x))
console.log(sortByDiff(arr,x))
答案 1 :(得分:1)
只需定义您的距离函数:
const dist = x => Math.abs(x - 7);
并将其差异应用于sort
方法的两个参数。
arr.sort((a, b) => dist(a) - dist(b));
有关sort
方法的更多信息,请参见MDN。
const arr = [10, 5, 3, 9, 2, 3];
const dist = x => Math.abs(x - 7);
const sorted = arr.sort((a, b) => dist(a) - dist(b));
console.log(sorted);