Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对两个不同值的数组进行排序,以保持原始配对_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 对两个不同值的数组进行排序,以保持原始配对

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',

我有两个js数组,一个包含字符串,另一个包含颜色代码,类似于:

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中的重复值将被指定为相同的颜色,即使在原始数组中它们是不同的。