joh*_*667 5 javascript arrays sorting algorithm
我必须创建一个函数来根据每个数字的"权重"对一串数字进行排序 - "权重"是加在一起的数字的数字(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)));
}
Run Code Online (Sandbox Code Playgroud)
哪里add只是一个通用的附加功能.对于上面的例子,sortArr将是[1, 9, 5, 8].
arr根据数字权重的新数组如何排序,从字符串中对原始数字数组进行排序的最佳方法是什么sortArr?
谢谢!
这应该可以解决问题:
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);
Run Code Online (Sandbox Code Playgroud)
输出:
100 32 62 54
Run Code Online (Sandbox Code Playgroud)
更新:
根据 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);
Run Code Online (Sandbox Code Playgroud)
注意:这是我第一次使用 lambda 语法编写 Javascript。感谢斯特林的建议。