[英]Javascript sort object key indexes
这是我的结构/示例:
let arrWeekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
let obj1 = {
'Montag' : ['test string'],
'Dienstag' : ['test string'],
'Mittwoch' : ['test string'],
'Donnerstag' : ['test string'],
'Freitag' : ['test string'],
'Samstag' : ['test string']
}
let obj2 = {
'Donnerstag' : ['test string'],
'Samstag' : ['test string'],
'Montag' : ['test string'],
'Dienstag' : ['test string'],
'Mittwoch' : ['test string'],
'Freitag' : ['test string']
}
for ( key in objWeekdays ) {
// do something
}
for in 循环中的“objectWeekdays”有时作为“obj1”排序为 object,但有时也作为“obj2”进行排序。
我的问题:
for in with obj1 => "Montag" 的关键索引是 0
for in with obj2 => "Montag" 的关键索引是 2
有没有办法在“for in”循环之前对 Object 个键进行排序?
我总是希望在 for in 循环中以“Montag”开头。
在此先感谢您的任何建议或帮助。javascri
您可以迭代工作日数组并检查该属性是否存在以供进一步处理。
这种方法对所有对象采用所需的顺序。
function iterate(object, days) {
for (const day of days) {
if (!(day in object)) continue;
console.log(object[day]); // processing
}
}
// call
iterate(object1, arrWeekdays);
简短回答:您无法对它们进行“排序”,因为根本没有必要这样做。
无论如何,如果您真的想按特定顺序放置这些属性,则必须按所需顺序创建一个新的 object。 请记住,此顺序不是永久性的,很可能会发生变化。
object 属性的顺序在 ECMAScript 中是非标准的。 永远不要假设 JavaScript object 中元素的顺序。Object 是一个无序的属性集合。 下面的答案向您展示了如何使用 arrays 的帮助“使用”已排序的属性,但从未真正改变对象本身属性的顺序。 所以,不,这是不可能的。 即使你构建了一个 object 的预排序属性,也不能保证它们以后会以相同的顺序显示。
我们可以使用Object.entries获取 obj2 的条目,对它们进行排序,然后使用Object.fromEntries重新创建它。
一般而言,人们对取决于财产顺序非常小心。 这取决于属性创建顺序。 如果您希望以这种方式迭代属性,最好获取一组键/条目,对它们进行排序,然后迭代。
let obj2 = { 'Donnerstag': ['test string'], 'Samstag': ['test string'], 'Montag': ['test string'], 'Dienstag': ['test string'], 'Mittwoch': ['test string'], 'Freitag': ['test string'] } let entries = Object.entries(obj2); entries.sort(([key1, v1], [key2, v2]) => key1.localeCompare(key2)); let obj2Sorted = Object.fromEntries(entries); console.log("Obj2, sorted:", obj2Sorted);
即使属性以正确的顺序插入,您仍然不能(或不应该)依赖它。 但是你绝对可以实现你自己的iterator ,这是一个人为的例子:
// object of days; not in "human" order const days = { wed: 3, sat: 6, mon: 1, sun: 7, fri: 5, tue: 2, thu: 4 }; days[Symbol.iterator] = function* () { yield this.mon; yield this.tue; yield this.wed; yield this.thu; yield this.fri; yield this.sat; yield this.sun; }; for (d of days) { console.log('for..of', d); } console.log('...days', ...days);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.