Javascript 如何根据其他标签数组对带有标签的对象数组进行排序?
例如,我想对带有标签的对象数组进行排序Javascript 如何根据其他标签数组对带有标签的对象数组进行排序?,javascript,sorting,Javascript,Sorting,例如,我想对带有标签的对象数组进行排序 var arrayToBeSorted = [{label: 'firstLabel', value: 123}, {label: 'secondLabel', value: 456}, {label: 'thirdLabel', value: 789}] var labels = ['secondLabel', 'thirdLabel', 'fourthLabel', 'firstLabel'] 例如,一组标签作为基线 var arrayToBeSo
var arrayToBeSorted = [{label: 'firstLabel', value: 123}, {label: 'secondLabel', value: 456}, {label: 'thirdLabel', value: 789}]
var labels = ['secondLabel', 'thirdLabel', 'fourthLabel', 'firstLabel']
例如,一组标签作为基线
var arrayToBeSorted = [{label: 'firstLabel', value: 123}, {label: 'secondLabel', value: 456}, {label: 'thirdLabel', value: 789}]
var labels = ['secondLabel', 'thirdLabel', 'fourthLabel', 'firstLabel']
现在我想对第一个数组进行排序,以便其中的对象遵循第二个数组中标签的顺序labels
我知道定制比较器的基本排序机制,比如
CustomComparator: function(a, b) {
if (a[0].length > b[0].length) return -1;
if (a[0].length < b[0].length) return 1;
return 0;
}
CustomComparator:函数(a、b){
如果(a[0].length>b[0].length)返回-1;
if(a[0].length
但我不知道如何转换这个
在我的研究中,我找到了用ruby编码的stackoverflow解决方案,但我不知道javascript中是否有类似的选项
我非常感谢您的帮助,为此投入了大量时间。您需要提供每秒数组值的优先级。这里,我们从第二个数组名作为键和索引作为优先级构建一个映射。因此,您可以使用
映射
和默认值
和排序
var arraytobested=[{label:'firstLabel',value:123},{label:'secondLabel',value:456},{label:'thirdLabel',value:789}]
变量标签=['secondLabel'、'thirdLabel'、'fourthLabel'、'firstLabel']
让mapper=newmap(labels.Map((v,i)=>[v,i+1]))
让final=arrayToBeSorted.sort((a,b)=>{
返回(mapper.get(a.label)| |无穷)-(mapper.get(b.label)| |无穷)
})
console.log(最终版)
有两种方法:
indexOf
重复搜索标签
数组indexOf
(在ES2015+中)的示例:
实时复制:
var arraytobested=[{label:'firstLabel',value:123},{label:'secondLabel',value:456},{label:'thirdLabel',value:789}];
变量标签=['secondLabel'、'thirdLabel'、'fourthLabel'、'firstLabel'];
排序((a,b)=>labels.indexOf(a.label)-labels.indexOf(b.label));
控制台日志(arrayToBeSorted)代码>您可以创建自定义订单,并通过它创建订单:
var arraytobsorted=[
{label:'firstLabel',值:123},
{label:'secondLabel',值:456},
{label:'thirdLabel',值:789}
];
设顺序={secondLabel:1,thirdLabel:2,fourthLabel:3,firstLabel:4};
排序((a,b)=>{
退货订单[a.label]-订单[b.label];
});
控制台日志(arrayToBeSorted)代码>直接使用
const sortArray=require('sort-array'))
常量数组排序=[
{label:'firstLabel',值:123},
{label:'secondLabel',值:456},
{label:'thirdLabel',值:789}
]
索塔雷(Arraytobsorted{
作者:'标签',
订单:“labelOrder”,
海关订单:{
标签顺序:['secondLabel','thirdLabel','fourthLabel','firstLabel']
}
})
console.log(arrayToBeSorted)
打印此输出:
[
{ label: 'secondLabel', value: 456 },
{ label: 'thirdLabel', value: 789 },
{ label: 'firstLabel', value: 123 }
]
尼娜指出了我回答中的一个选项的问题,我刚才已经解决了这个问题。因为你已经接受了我的答案,所以打电话给你让你知道,所以如果你使用了那个选项…:-)@第二种方法中的NinaScholz-Gah,-1是个坏主意,™ 谢谢首先,你使用什么价值并不重要。我的意思是要写一张便条,说明违约的情况。我将修复-1问题并添加注释,谢谢。