如何在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位于末尾。