Javascript 在比较每个数值的和之后,如何排序和列出数组元素

Javascript 在比较每个数值的和之后,如何排序和列出数组元素,javascript,arrays,sorting,Javascript,Arrays,Sorting,这段代码只返回数值和的顺序,如何返回列表中按最大和排列的数组元素? 例如,结果应该是: "1234-2722-2343-2842" "1234-2722-2343-2345" "1234-2322-2343-2342" 代码: var addSum=函数(ccNum){ var总和=0; 对于(var i=0;i使用和方法 var ccNums=[“1234-2322-2343-2342”、“1234-2722-2343-2345”、“1234-2722-2343-2842”]; //函数以

这段代码只返回数值和的顺序,如何返回列表中按最大和排列的数组元素? 例如,结果应该是:

"1234-2722-2343-2842"
"1234-2722-2343-2345"
"1234-2322-2343-2342"
代码:

var addSum=函数(ccNum){
var总和=0;
对于(var i=0;i使用方法

var ccNums=[“1234-2322-2343-2342”、“1234-2722-2343-2345”、“1234-2722-2343-2842”];
//函数以获取字符串中的数字之和
函数和(str){
//分裂字符串
返回str.split('-')
//迭代求和
.减少(功能a、b){
//解析要转换为数字的字符串
返回a+数字(b);//如果字符串不包含数字字符,则使用“returna+(parseInt(b,10)| | 0”)
},0);//设置初始值以避免2解析
}
//调用排序函数
ccNums.sort(函数(a,b){
//找出和,并在此基础上进行比较
返回金额(b)-返回金额(a);
});
console.log(ccNums)
方法的帮助下使用

var ccNums=[“1234-2322-2343-2342”、“1234-2722-2343-2345”、“1234-2722-2343-2842”];
//函数以获取字符串中的数字之和
函数和(str){
//分裂字符串
返回str.split('-')
//迭代求和
.减少(功能a、b){
//解析要转换为数字的字符串
返回a+数字(b);//如果字符串不包含数字字符,则使用“returna+(parseInt(b,10)| | 0”)
},0);//设置初始值以避免2解析
}
//调用排序函数
ccNums.sort(函数(a,b){
//找出和,并在此基础上进行比较
返回金额(b)-返回金额(a);
});

console.log(ccNums)
使用
字符串的解决方案。替换
字符串。拆分
数组.map
数组.filter
数组.reduce

var ccNums = ["1234-2322-2343-2342","1234-2722-2343-2345", "1234-2722-2343-2842"],
    getSum = function(num){
        return num.replace("-", "").split("").map(Number).filter(Boolean).reduce(function(prev, next){
            return prev + next;
        });
    };

ccNums.sort(function (a, b) {
    return getSum(b) - getSum(a);
});

console.log(ccNums);
输出:

["1234-2722-2343-2842", "1234-2722-2343-2345", "1234-2322-2343-2342"]

使用
String.replace
String.split
Array.map
Array.filter
Array.reduce的解决方案:

var ccNums = ["1234-2322-2343-2342","1234-2722-2343-2345", "1234-2722-2343-2842"],
    getSum = function(num){
        return num.replace("-", "").split("").map(Number).filter(Boolean).reduce(function(prev, next){
            return prev + next;
        });
    };

ccNums.sort(function (a, b) {
    return getSum(b) - getSum(a);
});

console.log(ccNums);
输出:

["1234-2722-2343-2842", "1234-2722-2343-2345", "1234-2322-2343-2342"]
我建议使用,因为它只对字符串的和使用一次迭代,直到排序结束,然后用排序后的项重建一个新数组

var ccNums=[“1234-2322-2343-2342”、“1234-2722-2343-2345”、“1234-2722-2343-2842”];
//临时数组保存具有位置和排序值的对象
var mapped=ccNums.map(函数(el,i){
返回{
索引:i,,
值:el.split(“”).reduce(函数(r,a){返回r+(+a | | 0)},0)
};
});
//对包含缩减值的映射数组进行排序
映射.排序(函数(a,b){
返回b.value-a.value;
});
//用于生成订单的容器
var result=mapped.map(函数(el){
返回ccNums[el.index];
});
console.log(result);
我建议使用,因为它只对字符串的和使用一次迭代,并一直使用到排序结束。然后它用排序的项重建一个新数组

var ccNums=[“1234-2322-2343-2342”、“1234-2722-2343-2345”、“1234-2722-2343-2842”];
//临时数组保存具有位置和排序值的对象
var mapped=ccNums.map(函数(el,i){
返回{
索引:i,,
值:el.split(“”).reduce(函数(r,a){返回r+(+a | | 0)},0)
};
});
//对包含缩减值的映射数组进行排序
映射.排序(函数(a,b){
返回b.value-a.value;
});
//用于生成订单的容器
var result=mapped.map(函数(el){
返回ccNums[el.index];
});
console.log(结果);