[英]Sort object by key whilst retaining present values to match order of array
我有两个对象。 格式之一是(footerMenuOptions)
:
[{Home: true}, {About: false}, {Features: false}, {Contact: false}]
第二个是格式(this.navbarMenuOptions)
:
["Home", "About", "Features", "Contact"]
有时,第二个对象(this.navbarMenuOptions)
的顺序会改变,比如说:
["About", "Home", "Features", "Contact"]
我希望第一个对象顺序(footerMenuOptions)
改变以能够反映这一点(即键),但值保持不变)。
在键值对不存在的情况下,应该使用默认值 false 创建它(即如果this.navbarMenuOptions
有一个新条目)。
实现这一目标的最有效方法是什么:
代码如下:
toggleFooterMenuOptionVisibility(index: number) {
// Some other stuff happens beforehand which isn't important
footerMenuOptions = this.sortFooterMenuOptions(footerMenuOptions);
}
sortFooterMenuOptions(footerMenuOptions) {
// this.navbarMenuOptions is a global variable so it doesn't need to be passed in
return footerMenuOptions;
}
您可以使用主对象的键并从第二个数组中获取索引,并通过这些索引对对象的键进行排序,如下所示:
var arr1 = { Home: true, About: false, Features: false, Contact: false } var arr2 = ["About", "Home", "Features", "Contact"]; const ordered = {}; Object.keys(arr1).sort((a, b) => { return arr2.indexOf(a) - arr2.indexOf(b); }).forEach(r => ordered[r] = arr1[r]); console.log(ordered);
我假设您的对象有 1 个键,或者第一个键与第二个数组中的值相同。 所以如果我们把它应用到你的例子中,它应该变成这样:
sortFooterMenuOptions(unsortedFooterMenuOptions) { const sortedFooterMenuOptions = {}; Object.keys(unsortedFooterMenuOptions) .sort((a, b) => { return this.navbarMenuOptions.indexOf(a) - this.navbarMenuOptions.indexOf(b); }).forEach(r => sortedFooterMenuOptions[r] = unsortedFooterMenuOptions[r]); return sortedFooterMenuOptions; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.