javascript - 如何根据另一个数组的排序方式对一个数组进行排序? (JavaScript)

标签 javascript arrays algorithm sorting

我必须创建一个函数来根据每个数字的“权重”对一串数字进行排序——“权重”是数字加在一起的数字(99 的权重为 18, 100 将是 1,等等)。这意味着字符串 "100 54 32 62" 将返回 "100 32 62 54"

我可以通过以下方式获得这些数字的权重数组:

function orderWeight(str) {
    var arr = str.split(" ");
    var sortArr = [];
    arr.forEach(t => sortArr.push(t.split("").map(s => parseInt(s, 10)).reduce(add, 0)));
}

add 只是一个通用的加法函数。对于上面的示例,sortArr 将是 [1, 9, 5, 8]

根据新的数字权重数组 sortArr 的排序方式,对字符串 arr 中的原始数字数组进行排序的最佳方法是什么?

谢谢!

最佳答案

这应该可以解决问题:

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort(function(a, b) {
    return (a.split('').reduce(function(p, c) { return +p + +c; })) > (b.split('').reduce(function(p, c) { return +p + +c; }));
  }).join(' ');
}

var result = orderWeight(x);

输出:

100 32 62 54

更新:

根据 Sterling 的建议,这里是用 lambda 格式编写的相同函数。

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort((a, b) => a.split('').reduce((p, c) => +p + +c) > b.split('').reduce((p, c) => +p + +c)).join(' ');
}

var result = orderWeight(x);

注意:这是我第一次使用 lambda 语法编写 Javascript。感谢 Sterling 的建议。

关于javascript - 如何根据另一个数组的排序方式对一个数组进行排序? (JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404589/

相关文章:

python - 使用 numpy loadtxt 函数从文本文件中读取值

java - 汉诺塔解决方案问题

javascript - 正则表达式删除空格

javascript - 每个数组元素的异步调用并等待完成

javascript - 如何使用 groupBy 函数输出数组

C++ 在 1D 数组中表示 3D 数组

sql - 处理给定页面编号的基于值的分页

algorithm - 类似 photoshop 的快速选择算法的开源实现?

javascript - jQuery Simple Spy 不再适用于 jQuery 1.5

javascript - Gatsby 开发失败 : Error: Cannot find module 'gatsby-cli/lib/reporter'