Javascript 使用数组数组对键值对对象数组进行排序

Javascript 使用数组数组对键值对对象数组进行排序,javascript,arrays,sorting,object,key-value,Javascript,Arrays,Sorting,Object,Key Value,我试图使用第二个数组的索引对键值对对象数组进行排序 考虑以下代码: const sheet=[['ES']、['MES']、['NQ']、['MNQ']]//按此顺序排序 const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序 const sorted=quotes.sort((a,b)=>{ 返回表.indexOf(a.root)-表.indexOf(b.root) }) console.log(

我试图使用第二个数组的索引对键值对对象数组进行排序

考虑以下代码:

const sheet=[['ES']、['MES']、['NQ']、['MNQ']]//按此顺序排序
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
const sorted=quotes.sort((a,b)=>{
返回表.indexOf(a.root)-表.indexOf(b.root)
})

console.log(已排序)
工作表
是一个数组数组,因此
sheet.indexOf
除了从
工作表
中获取的数组之外,任何内容都将返回
-1

首先将
工作表
转换为字符串数组:

const sheet=[['ES']、['MES']、['NQ']、['MNQ']]
.map(([str])=>str);
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
const sorted=quotes.sort((a,b)=>{
返回表.indexOf(a.root)-表.indexOf(b.root)
})

console.log(已排序)
工作表
是一个数组数组,因此
sheet.indexOf
除了从
工作表
中获取的数组之外,任何内容都将返回
-1

首先将
工作表
转换为字符串数组:

const sheet=[['ES']、['MES']、['NQ']、['MNQ']]
.map(([str])=>str);
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
const sorted=quotes.sort((a,b)=>{
返回表.indexOf(a.root)-表.indexOf(b.root)
})

console.log(排序)
您不能使用
indexOf
,因为
sheet
是数组的数组。尝试使用
findIndex()
并比较唯一的数组元素:

const sheet=[['ES']、['MES']、['NQ']、['MNQ']]//按此顺序排序
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
让排序=引号。排序((a,b)=>{
返回sheet.findIndex(([x])=>x==a.root)-sheet.findIndex(([x])=>x==b.root);
})

控制台日志(已排序)
您不能使用
indexOf
,因为
sheet
是一个数组数组。尝试使用
findIndex()
并比较唯一的数组元素:

const sheet=[['ES']、['MES']、['NQ']、['MNQ']]//按此顺序排序
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
让排序=引号。排序((a,b)=>{
返回sheet.findIndex(([x])=>x==a.root)-sheet.findIndex(([x])=>x==b.root);
})

控制台日志(已排序)
如果
引号
数组具有唯一的
{root}
对象,则可以使用稍微不同的方法(对于较大的数组,这应该比使用
.sort()
更有效),将
引号
数组和
数组中的
{root}
对象进行排序,如下:

const sheet=[['ES']、['MES']、['NQ']、['MNQ'];
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
constlut=newmap(quotes.Map({root})=>[root,{root}]);
常量排序=sheet.map([s])=>lut.get(s));

console.log(sorted)
如果
引号
数组具有唯一的
{root}
对象,则可以使用稍微不同的方法(这应该比使用
.sort()
更有效),即从
引号
数组,然后从
数组
{root}
这样的对象:

const sheet=[['ES']、['MES']、['NQ']、['MNQ'];
const quotes=[{root:'MNQ'},{root:'MES'},{root:'ES'},{root:'NQ'}]//对这些对象进行排序
constlut=newmap(quotes.Map({root})=>[root,{root}]);
常量排序=sheet.map([s])=>lut.get(s));

console.log(已排序)
Bingo!非常感谢@CertainPerformance。15分钟的时间一过,我就接受你的回答!非常感谢@CertainPerformance。15分钟的时间一到,我就接受你的回答over@CertainPerformance,你能解释一下编辑的原因吗,这样我就不会再犯同样的错误了?看,这不是什么大问题,但堆栈溢出是一个参考站点,而不是一个讨论论坛,所以“谢谢”等只是噪音(当我们看到它们时,我们应该把它们从帖子中删除)注意到,并且从现在起不再那么“闲聊”on@CertainPerformance,你能解释一下编辑的原因吗,这样我就不会再犯同样的错误了?看-这不是什么大问题,但堆栈溢出是一个参考网站,而不是一个讨论论坛,所以“谢谢”etc只是一种噪音(当我们看到它们时,我们应该把它们从帖子中删除),从现在起,它将不再那么“健谈”