Javascript使用下划线基于另一个数组顺序对数组顺序进行排序

Javascript使用下划线基于另一个数组顺序对数组顺序进行排序,javascript,arrays,sorting,underscore.js,Javascript,Arrays,Sorting,Underscore.js,基本上是我的题目。我有两个物体阵列 数组1: var firstArray = [ {id: "1", value: 1}, {id: "5", value: 0.5}, {id: "3", value: 0.25}, {id: "4", value: 0.125}, {id: "2", value: 0.0625} ]; var secondArray = [ {id: 1, name: "a"}, {id: 2, name: "b"}, {id: 3, name: "c"}, {id: 4

基本上是我的题目。我有两个物体阵列

数组1:

var firstArray = [
{id: "1", value: 1},
{id: "5", value: 0.5},
{id: "3", value: 0.25},
{id: "4", value: 0.125},
{id: "2", value: 0.0625}
];
var secondArray = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 5, name: "e"}
];
var secondArray = [
{id: 1, name: "a"},
{id: 5, name: "e"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 2, name: "b"}
];
数组2:

var firstArray = [
{id: "1", value: 1},
{id: "5", value: 0.5},
{id: "3", value: 0.25},
{id: "4", value: 0.125},
{id: "2", value: 0.0625}
];
var secondArray = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 5, name: "e"}
];
var secondArray = [
{id: 1, name: "a"},
{id: 5, name: "e"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 2, name: "b"}
];
如何对第二个数组进行排序,使其顺序与第一个数组顺序匹配,如下所示:

结果:

var firstArray = [
{id: "1", value: 1},
{id: "5", value: 0.5},
{id: "3", value: 0.25},
{id: "4", value: 0.125},
{id: "2", value: 0.0625}
];
var secondArray = [
{id: 1, name: "a"},
{id: 2, name: "b"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 5, name: "e"}
];
var secondArray = [
{id: 1, name: "a"},
{id: 5, name: "e"},
{id: 3, name: "c"},
{id: 4, name: "d"},
{id: 2, name: "b"}
];

对于普通ES6,您可以使用a作为给定
id
的索引,并使用
firstArray
的索引对其进行排序

问题是给定数组中的
id
类型不同

var firstArray=[{id:“1”,值:1},{id:“5”,值:0.5},{id:“3”,值:0.25},{id:“4”,值:0.125},{id:“2”,值:0.0625},
secondArray=[{id:1,名称:“a”},{id:2,名称:“b”},{id:3,名称:“c”},{id:4,名称:“d”},{id:5,名称:“e”}],
map=newmap(firstArray.map(({id},i)=>[+id,i]);
secondArray.sort((a,b)=>map.get(a.id)-map.get(b.id));
log(secondArray)
.as console wrapper{max height:100%!important;top:0;}
注意一些强制转换(一个数组的
id
是字符串,一个是数字),您可以使用ES6(不同于Nina的
Map
)和:

var firstArray=[
{id:“1”,值:1},
{id:“5”,值:0.5},
{id:“3”,值:0.25},
{id:“4”,值:0.125},
{id:“2”,值:0.0625}
];
var secondArray=[
{id:1,名称:“a”},
{id:2,名称:“b”},
{id:3,名称:“c”},
{id:4,名称:“d”},
{id:5,名称:“e”}
];
var result=firstArray.map(项=>{
返回{
id:编号(项目id),
名称:secondArray.find(element=>element.id==item.id).name
}
})

console.log(result)
给出一个下划线/Lodash的答案,因为这是问题标题指示OP的目的。这段代码根据第一个数组中对应id的索引对第二个数组进行排序

$(函数(){
变量firstArray=[
{id:“1”,值:1},
{id:“5”,值:0.5},
{id:“3”,值:0.25},
{id:“4”,值:0.125},
{id:“2”,值:0.0625}
];
var secondArray=[
{id:1,名称:“a”},
{id:2,名称:“b”},
{id:3,名称:“c”},
{id:4,名称:“d”},
{id:5,名称:“e”}
];
var sorted=u.sortBy(第二个数组,函数(obj){
返回u.findIndex(firstArray,{id:obj.id.toString()});
});
控制台日志(已排序);
});

我感觉到您计划在第二个数组排序后按索引关联这两个数组。我建议另一种关系方式

const firstArray=
[{id:“1”,值:1}
,{id:“5”,值:0.5}
,{id:“3”,值:0.25}
,{id:“4”,值:0.125}
,{id:“2”,值:0.0625}
]
常数二次数组=
[{id:1,名称:“a”}
,{id:2,名称:“b”}
,{id:3,名称:“c”}
,{id:4,名称:“d”}
,{id:5,名称:“e”}
]
康斯特瑟达雷=
firstArray.map(x=>
Object.assign(x,secondArray.find(y=>y.id==x.id)))
console.log(thirdArray)
//[{id:1,值:1,名称:'a'}
//,{id:5,值:0.5,名称:'e'}
//,{id:3,值:0.25,名称:'c'}
//,{id:4,值:0.125,名称:'d'}
//,{id:2,值:0.0625,名称:'b'}

//]
您有一个更重要的问题要回答:对第二个数组进行排序后,您将做什么?返回相同的数组,而不是排序:(