我必须创建一个函数来根据'权重'对一串数字进行排序。每个号码 - '重量'是加在一起的数字的数字(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]
。
根据数字权重arr
的新数组如何排序,从字符串sortArr
对原始数字数组进行排序的最佳方法是什么?
谢谢!
答案 0 :(得分:4)
这应该可以解决问题:
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的建议。
答案 1 :(得分:0)
sorting with map的解决方案。
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 11,
center: {lat: 41.876, lng: -87.624}
});
var parser = new geoXML3.parser({map: map});
parser.parse('westcampus.kml');
}

答案 2 :(得分:-1)
我将有一个索引数组(0..n-1)并根据权重数组对其进行排序(通过传递比较函数来比较给定索引值的权重)。 然后你将有一个索引数组,显示每个项目应该在哪里(在你的例子中,索引数组将是[0,2,3,1],这意味着arr [0]应该是第一个,然后是arr [2]现在,您可以使用索引数组构建排序数组,例如[arr [0],arr [2],arr [3],arr [1]]。 所以回顾一下:获取输入数组,计算权重数组,创建索引数组0..n-1,根据权重数组对其进行排序,最后根据排序的索引数组构造输出数组。