Javascript 使用另一个数组对固定的对象数组进行排序

Javascript 使用另一个数组对固定的对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个变量,它定义了如下对象的顺序: const order = ['large', 'medium', 'small']; 我想使用order array中的名称匹配数据数组对象的顺序: const data = [{name: "small", children: []}, {name: "medium", children: []}, {name: "large", children: []}] 因此,影响应如下所示: co

我有一个变量,它定义了如下对象的顺序:

const order = ['large', 'medium', 'small'];
我想使用order array中的名称匹配数据数组对象的顺序:

const data = [{name: "small", children: []}, {name: "medium", children: []}, {name: "large", children: []}]
因此,影响应如下所示:

const data = [{name: "large", children: []}, {name: "medium", children: []}, {name: "small", children: []}]

如何实现这一点?

我们可以通过使用order数组中
名称的索引来实现:

const data = [{name: "small", children: []}, {name: "medium", children: []}, {name: "large", children: []}]
const order=[“大”、“中”、“小”];
const data=[{name:“small”,children:[]},{name:“medium”,children:[]},{name:“large”,children:[]};
常数sortArray=(arr,order)=>{
返回data.sort((a,b)=>order.indexOf(a.name)-order.indexOf(b.name));
}

console.log(sortArray(数据、命令))使用
lodash

_(data).sortBy([(x) => {
    return order.findIndex(y => y.name === x.name);
}]).value();
我建议:
data=data.sort(item=>order.indexOf(item.name))


data=data.sort(item=>-order.indexOf(item.name))

您可以使用自定义排序函数来比较顺序数组中匹配单词的索引

差不多

const order=[“大”、“中”、“小”];
const data=[{name:“small”,children:[]},{name:“medium”,children:[]},{name:“large”,children:[]}]
const result=data.sort((a,b)=>order.indexOf(a)console.log(result)
如果实际数组很大,则尝试避免在每次调用
sort
回调函数时进行扫描,因为这意味着算法的时间复杂度为O(n²logn)。如果首先将订单信息转换为映射(可能以普通对象的形式)并使用bucket sort,则可以在线性时间内完成:

const order=[“大”、“中”、“小”];
const data=[{name:“small”,children:[]},{name:“medium”,children:[]},{name:“large”,children:[]};
//预处理O(n)
const map=Object.fromEntries(order.map((key,i)=>[key,i]);
让result=order.map(()=>[]);
//铲斗分拣O(n)
for(让obj的数据)结果[map[obj.name]].push(obj);
//展平O(n)
result=result.flat();

控制台日志(结果)
可以使用自定义排序函数来比较顺序数组中匹配单词的索引。