如果你运行下面的代码片段,它会生成一个随机的人列表,每个人都有一个独特的orig
属性,你可以假装这是他们到达机场的排队顺序(请多多包涵)。
船长不公平,不让人们按照他们到达的顺序坐在相应的座位上。他更喜欢一些名字而不是其他名字,并且同样喜欢一些名字。
他的偏好由prefs
对象说明。 Bob
, Sue
, 和Sal
是他最喜欢的名字,但他同样喜欢它们。 Ian
并且Sam
是他最不喜欢的,但他同样不喜欢他们。
所以这个不公平的船长根据他对他们名字的喜爱程度来招待他们。
这意味着人员列表首先按照他们到达的顺序排序,然后根据船长对他们名字的偏好再次排序。
当您运行代码片段时,它会生成一个对象列表,每个对象都只有一个name
和orig
(原始顺序)属性,并按上述方式排序。
假装船长的喜好是未知的。如果你生成一个足够长的列表,或者一个足够短的列表,你应该能够推断出这个prefs
对象。
prefs
对象?我需要一个基于许多短列表的解决方案,而不是基于一个非常长的列表的解决方案。
const prefs = {
Bob: { pref: 1 },
Sue: { pref: 1 },
Sal: { pref: 1 },
Jim: { pref: 2 },
Jon: { pref: 2 },
Lyn: { pref: 2 },
Ian: { pref: 3 },
Sam: { pref: 3 }
};
const names = Object.keys(prefs);
const randomName = () => names[~~(Math.random() * names.length)];
const list = new Array(5).fill().map((_, orig) => {
const name = randomName();
return { name, orig };
}).sort((a, b) => prefs[a.name].pref > prefs[b.name].pref ? 1 : -1);
console.log(list);
这不是我的实际问题,但我希望这个简化版本很容易理解。如果我能解决这个问题,那么我就能解决我真正的问题。
猛跑小猪
陪伴而非守候
白衣染霜花
相关分类