将数字排序为字符串的条件
我知道这里存在类似的问题Javascript string conversion and array sort,但我需要我的解决方案版本的帮助。将数字排序为字符串的条件
任务: 数字的权重是其数字的总和。 例如99将有“权重”18,100将有“权重”1,所以在列表100中将会出现在99之前。给定一个正常顺序的权重字符串,你可以给这个字符串排序这些字符串的“权重”号码?
实施例:由数字权重排序 “56 65 74 100 99 68 86 180 90” 变为: “100 180 90 56 65 74 68 86 99” FFC成员 的 当两个数具有相同的 “权重”,让我们把它们看作是字符串而不是数字:100在180之前,因为它的“权重”(1)小于180(9)中的一个,而180在90之前,因为具有相同的“权重”(9)它以之前的字符串形式出现。
问题: 我错过的唯一部分是如何做最后一部分,所以例如180将在207和90之前,类似地207在45之前等等。
var arr = [56, 65, 74, 100, 99, 207, 45, 68, 86, 180, 90];
arr.sort(function(a, b) {
var A = ("" + a).split("").reduce(function(c, d) {
return Number(c) + Number(d);
});
var B = ("" + b).split("").reduce(function(e, f) {
return Number(e) + Number(f);
});
if (A > B) {
return A - B;
} else if (A == B) {
//I ASSUME I SHOULD WRITE SOMETHING HERE
}
});
console.log(arr);
您可以添加一个排序条件,并将结果与进行比较。
function weight(v) {
return v.toString().split('').reduce(function (a, b) { return +a + +b; });
}
var array = [56, 65, 74, 100, 99, 207, 45, 68, 86, 180, 90];
array.sort(function (a, b) {
return weight(a) - weight(b) || a.toString().localeCompare(b);
});
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我认为你正在寻找这样的事情
var arr = [56, 65, 74, 100, 99, 207, 45, 68, 86, 180, 90];
arr.sort(function(a, b) {
var A = ("" + a).split("").reduce(function(c, d) {
return Number(c) + Number(d);
});
var B = ("" + b).split("").reduce(function(e, f) {
return Number(e) + Number(f);
});
if (A > B) {
return A - B;
} else if (A == B) {
return a.toString() - b.toString();
}
});
console.log(arr);
希望这有助于!
所以,我只是他们转换为字符串,并取得了比较,但在评论部分由@ 4castle给出的答案是好多了,我就完成了你的代码 – zenwraight
谢谢。我曾试图这个版本并没有工作。我现在正在尝试4castle-s的建议 – Alex
要通过字符串进行比较,您需要使用localeCompare而不是减法,它通过数字值进行比较。 – 4castle
你可以使用一个sumDigits
函数来获得的重量,那么你的排序里面调用这个函数和比较。
var arr = [56, 65, 74, 100, 99, 207, 45, 68, 86, 180, 90];
arr.sort(function(a, b) {
var A = sumDigits(a);
var B = sumDigits(b);
if (A > B) {
return 1;
} else {
return -1;
}
});
console.log(arr);
function sumDigits(number) {
var str = number.toString();
var sum = 0;
for (var i = 0; i < str.length; i++) {
sum += parseInt(str.charAt(i), 10);
}
return sum;
}
非常感谢你......我尝试了一切,但我甚至都不知道localcompare)) – Alex