如何在JavaScript中强制简化为不按字母顺序排序
我需要按数组中的元素分组,所以我这样做了:如何在JavaScript中强制简化为不按字母顺序排序,javascript,Javascript,我需要按数组中的元素分组,所以我这样做了: const cars = [{ make: "vw", model: "passat", year: "2012" }, { make: "vw", model: "golf", year: "2013" },
const cars = [{
make: "vw",
model: "passat",
year: "2012"
},
{
make: "vw",
model: "golf",
year: "2013"
},
{
make: "ford",
model: "mustang",
year: "2012"
},
{
make: "ford",
model: "fusion",
year: "2015"
},
{
make: "kia",
model: "optima",
year: "2012"
}
];
let group = cars.reduceRight((r, a) => {
r[a.make] = [...r[a.make] || [], a];
return r;
}, []);
console.log(cars)
console.log(group)
但不幸的是,在使用reduce
分组之后,元素的顺序是错误的。
大众集团已经走到了尽头,我该如何减少到不排序元素,或者可能有更好的方法来对元素进行分组
演示:
reduceRight
从右向左应用reduce。只要不要使用右侧
变体,它将按原始顺序运行
const cars=[{
制造:“大众”,
型号:“帕萨特”,
年份:“2012年”
},
{
制造:“大众”,
模特:“高尔夫”,
年份:“2013年”
},
{
制造:“福特”,
模型:“野马”,
年份:“2012年”
},
{
制造:“福特”,
模型:“融合”,
年份:“2015年”
},
{
制作:“起亚”,
模型:“optima”,
年份:“2012年”
}
];
让组=车。减少((r,a)=>{
r[a.make]=[…r[a.make]| | |[],a];
返回r;
}, {});
控制台日志(汽车)
console.log(组)
reduceRight
从右向左应用reduce。只要不要使用右侧
变体,它将按原始顺序运行
const cars=[{
制造:“大众”,
型号:“帕萨特”,
年份:“2012年”
},
{
制造:“大众”,
模特:“高尔夫”,
年份:“2013年”
},
{
制造:“福特”,
模型:“野马”,
年份:“2012年”
},
{
制造:“福特”,
模型:“融合”,
年份:“2015年”
},
{
制作:“起亚”,
模型:“optima”,
年份:“2012年”
}
];
让组=车。减少((r,a)=>{
r[a.make]=[…r[a.make]| | |[],a];
返回r;
}, {});
控制台日志(汽车)
console.log(组)
属性插入顺序自ES2015开始得到保证,@user2864740。有关详细信息,请参阅。@Klaycon Wow,^ ^自ES2015起保证属性插入顺序,@user2864740。有关详细信息,请参阅。@Klaycon哇,我复制了你的代码,而大众仍然在结尾。。。为什么?@DiPix,运行精确的代码会在开始时为我生成一个与VW的结果。你的浏览器是什么?我正在使用Chrome@DiPix,不知道该告诉你什么。该代码在Chrome、Firefox和Edge中都可以在堆栈片段和TryIt链接中使用。也许仔细检查一下你看到的是正确的输出?嗯,很奇怪,看起来大众是第一个,但当我点击预览内容时,它就在最后了。事实上,在下拉列表中,VW在最后。我复制了你的代码,而VW仍然在最后。。。为什么?@DiPix,运行精确的代码会在开始时为我生成一个与VW的结果。你的浏览器是什么?我正在使用Chrome@DiPix,不知道该告诉你什么。该代码在Chrome、Firefox和Edge中都可以在堆栈片段和TryIt链接中使用。也许仔细检查一下你看到的是正确的输出?嗯,很奇怪,看起来大众是第一个,但当我点击预览内容时,它就在最后了。事实上,在下拉列表中,VW位于末尾。