吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 549|回复: 8
收起左侧

[求助] JS二维数组排序的问题

  [复制链接]
cqwcns 发表于 2023-2-13 17:13
如下代码,我希望根据区域的总数进行排序(即对各区域数值进行求和,在根据求和结果进行排序)。
不知道应该这么写,请各位大佬指教,感谢。
[JavaScript] 纯文本查看 复制代码
      const arrData = [
                [东区', 50, 67, 0, 17, 67, 50, 0],
                ['西区', 32, 45, 13, 65, 48, 97, 3],
                ['南区', 35, 3, 0, 10, 16, 97, 97],
                ['北区', 29, 32, 3, 94, 90, 97, 97],
                ['中区', 33, 33, 33, 50, 33, 33, 33]
            ];

        const arr = arrData.sort(function (a, b) {
            console.log(a.slice(1))
            return a.slice(1) - b.slice(1)
        })

        console.log('arr', arr)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Pwaerm 发表于 2023-2-13 17:24
[Asm] 纯文本查看 复制代码
const arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 29, 32, 3, 94, 90, 97, 97],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
];
function getTotal(_array) {
    var _count = 0;
    var _t = _array.length;
    while (_t--) {
        var _n = Number(_array[_t]);
        if (!isNaN(_n)) {
            _count += _n;
        }
    }
    return _count;
}
const arr = arrData.sort(function (a, b) {
    return getTotal(a) - getTotal(b);
})

console.log('arr', arr)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

Pwaerm 发表于 2023-2-13 17:28
[Asm] 纯文本查看 复制代码
const arr = arrData.sort(function (a, b) {
    return eval(a.slice(1).join("+")) - eval(b.slice(1).join("+"))
})


这样也行,但不太灵活
rosguy 发表于 2023-2-13 18:07
[JavaScript] 纯文本查看 复制代码
let arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 29, 32, 3, 94, 90, 97, 97],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
  ];
  let res = arrData.sort((a,b)=>a.slice(1).reduce((p,v)=>p+v)-b.slice(1).reduce((p,v)=>p+v));
  console.log(res);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

lcbreak 发表于 2023-2-13 20:42
本帖最后由 lcbreak 于 2023-2-13 20:43 编辑

[JavaScript] 纯文本查看 复制代码
const arrData = [
          ['东区', 50, 67, 'aa', 17, 67, 50, 0],    //==>251
          ['西区', 32, 45, 13, 65, 48, 97, 3],  //==>303
          ['南区', 35, 3, 0, 10, 16, 97, 97],   //==>258
          ['北区', 29, 32, 3, 94, 90, 97, 97],  //==>442
          ['中区', 33, 33, 33, 50, 33, 33, 33]  //==>248
];

function getTotal(arr) { 
    let count = 0;
    let index = arr.length-1;
    while (index) {
        if (!isNaN(arr[index])) {
            count += arr[index];
        }
        index--;
    }
    return count

}

const arr = arrData.sort((a, b) => getTotal(a) - getTotal(b))
console.log(arr);

这样应该符合要求。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

kawaii 发表于 2023-2-13 23:44
[JavaScript] 纯文本查看 复制代码
const arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 1, 2, 3, 1, 1, 97, 1],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
];

const arr = arrData.sort(function (a, b) {
    let aTotal = 0;
    let bTotal = 0;
    a.slice(1).forEach((num) => {
        aTotal += num;
    })
    b.slice(1).forEach((num) => {
        bTotal += num;
    })

    return aTotal - bTotal
})
arr.forEach(arr => {
    console.log(arr)
})

在你代码基础上稍微调整了一下

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

涛之雨 发表于 2023-2-14 00:33
本帖最后由 涛之雨 于 2023-2-14 00:36 编辑
const arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 29, 32, 3, 94, 90, 97, 97],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
];
const val=arrData.map(a=>[a[0],a.slice(1).reduce((a,b)=>a+b,0)]).sort((a,b)=>a-b)
console.log(val)

emmm我是不是理解错题目了。。。问题不大,楼上有正确的

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

侃遍天下无二人 发表于 2023-2-14 01:26
本帖最后由 侃遍天下无二人 于 2023-2-14 01:37 编辑

这样?是不是很优雅
[JavaScript] 纯文本查看 复制代码
const arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 1, 2, 3, 1, 1, 97, 1],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
]

arrData.map(x => {
   return [x[0],(x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]) ]
}).sort( (x,y)=> {
   return x[1] - y[1]
})


稍微优化了下,这样就更省内存了
[JavaScript] 纯文本查看 复制代码
arrData.sort( (x,y) => {
    let result = 0
    for(let i=1;i<=7;i++){
        result += x[i]-y[i]
    }
    return result
})

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

dode 发表于 2023-2-14 14:27
const arrData = [
    ['东区', 50, 67, 0, 17, 67, 50, 0],
    ['西区', 32, 45, 13, 65, 48, 97, 3],
    ['南区', 35, 3, 0, 10, 16, 97, 97],
    ['北区', 29, 32, 3, 94, 90, 97, 97],
    ['中区', 33, 33, 33, 50, 33, 33, 33]
];

const arr = arrData.sort(function (a, b) {
  const sumA = a.slice(1).reduce((acc, cur) => acc + cur);
  const sumB = b.slice(1).reduce((acc, cur) => acc + cur);
  return sumB - sumA;
});

console.log('arr', arr);

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表