Javascript 对两个不同值的数组进行排序,以保持原始配对
我有两个js数组,一个包含字符串,另一个包含颜色代码,类似于:Javascript 对两个不同值的数组进行排序,以保持原始配对,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有两个js数组,一个包含字符串,另一个包含颜色代码,类似于: strings = ['one', 'twooo', 'tres', 'four']; colors = ['000000', 'ffffff', 'cccccc', '333333']; strings.sort(function(a, b){ return b.length - a.length; }); 我需要按照值的长度对第一个数组进行排序,先长一点。我知道我可以做一些事情,比如: strings = ['one',
strings = ['one', 'twooo', 'tres', 'four'];
colors = ['000000', 'ffffff', 'cccccc', '333333'];
strings.sort(function(a, b){
return b.length - a.length;
});
我需要按照值的长度对第一个数组进行排序,先长一点。我知道我可以做一些事情,比如:
strings = ['one', 'twooo', 'tres', 'four'];
colors = ['000000', 'ffffff', 'cccccc', '333333'];
strings.sort(function(a, b){
return b.length - a.length;
});
但这样我就失去了每根线的颜色。如何对两个数组进行排序以保持密钥配对?公然复制和改编
它只是对另一个数组使用相同的排序顺序
//要排序的数组
var strings=['one','twoo','tres','four'],
颜色=['000000','ffffff','CCCCC','333333'];
//临时数组保存具有位置和排序值的对象
var mapped=strings.map(函数(el,i){
返回{index:i,value:el.length};
})
//对包含缩减值的映射数组进行排序
映射.排序(函数(a,b){
返回b.value-a.value;
});
//用于生成订单的容器
var resultStrings=mapped.map(函数(el){
返回字符串[el.index];
});
var resultColors=mapped.map(函数(el){
返回颜色[el.index];
});
document.write(“”+JSON.stringify(resultString,0,4)+“”);
document.write(“”+JSON.stringify(resultColors,0,4)+“”)代码>您可以尝试以下方法:
var strings=[{name:'one',color:'000000'},{name:'tres',color:'cccccc'},{name:'four',color:'333333'},{name:'twoo',color:'ffffff'}];
var sorted=strings.sort(函数(a,b){
返回a.name.length>b.name.length;//按升序对名称的长度排序
});
console.log(已排序)
document.write(''+JSON.stringify(排序,0,4)+'')代码>您可以使用以下代码:
输出:
为什么不仅仅是一个objects数组有时你不能只重新编码数百行代码。总有一个诀窍,就是创建第三个数组,从1到其他两个数组的长度,并对其进行排序。然后可以重新排列其他两个数组。或者您可以编写自己的排序代码,并进行两次交换,而不是一次。toLowerCase
调用是多余的,因为在sort
过程中字符串实际上不会进行比较。ie-8不支持仅问题映射。@zakaiter,有帮助。我喜欢这段代码,但我发现一个问题是arr1中的重复值将被指定为相同的颜色,即使在原始数组中它们是不同的。