我必须创建一个函数来根据每个数字的“权重”对一串数字进行排序——“权重”是数字加在一起的数字(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/