根据两个索引的乘积对二维数组进行排序

时间:2021-04-15 22:23:37

标签: javascript

我正在尝试根据每个列表的第 5 个和第 6 个值的乘积对一个列表数组进行排序,其中每个列表包含 6 个浮点数。

我需要这个:

const name = 
  [ [ -0.83,  0.34, -0.44, -0.82, -0.93, -0.29 ] 
  , [  0.85,  0.02,  0.32, -0.58, -0.7,   0.01 ] 
  , [ -0.83, -0.15, -0.47,  0.44, -0.35,  0.35 ] 
  , [ -0.09, -0.62, -0.19, -0.86,  0.15,  0.04 ] 
  , [ -0.65, -0.99, -0.41, -0.45, -0.16,  0.38 ] 
  , [  0.47,  0.64, -0.15, -0.59, -0.41,  0.54 ] 
  , [  0.32, -0.15, -0.97,  0.35,  0.72, -0.15 ] 
  ] 

变成这样:

const name = 
  [ [  0.47,  0.64, -0.15, -0.59, -0.41,  0.54 ] 
  , [ -0.83, -0.15, -0.47,  0.44, -0.35,  0.35 ] 
  , [  0.32, -0.15, -0.97,  0.35,  0.72, -0.15 ] 
  , [ -0.65, -0.99, -0.41, -0.45, -0.16,  0.38 ] 
  , [  0.85,  0.02,  0.32, -0.58, -0.7,   0.01 ] 
  , [ -0.09, -0.62, -0.19, -0.86,  0.15,  0.04 ] 
  , [ -0.83,  0.34, -0.44, -0.82, -0.93, -0.29 ] 
  ] 

这是我目前的代码:

function product(name) {
  return name.sort((a,b) => (a[4] - b[4]) * (a[5] - b[5]));
}

1 个答案:

答案 0 :(得分:0)

我认为您的意思是比较每个数组的乘积,而不是差异的乘积。

function product(name) {
    return name.sort((a, b) => (a[4] * a[5]) - (b[4] * b[5]));
}

let a = [[-0.83, 0.34, -0.44, -0.82, -0.93, -0.29],
    [0.85, 0.02, 0.32, -0.58, -0.7, 0.01],
    [-0.83, -0.15, -0.47, 0.44, -0.35, 0.35],
    [-0.09, -0.62, -0.19, -0.86, 0.15, 0.04],
    [-0.65, -0.99, -0.41, -0.45, -0.16, 0.38],
    [0.47, 0.64, -0.15, -0.59, -0.41, 0.54],
    [0.32, -0.15, -0.97, 0.35, 0.72, -0.15]];

console.log(product(a));

输出:

[ [ 0.47, 0.64, -0.15, -0.59, -0.41, 0.54 ],
  [ -0.83, -0.15, -0.47, 0.44, -0.35, 0.35 ],
  [ 0.32, -0.15, -0.97, 0.35, 0.72, -0.15 ],
  [ -0.65, -0.99, -0.41, -0.45, -0.16, 0.38 ],
  [ 0.85, 0.02, 0.32, -0.58, -0.7, 0.01 ],
  [ -0.09, -0.62, -0.19, -0.86, 0.15, 0.04 ],
  [ -0.83, 0.34, -0.44, -0.82, -0.93, -0.29 ] ]