Yul*_*ale 5 javascript arrays sorting
这个问题是一个延续了这个问题。
假设我有一个如下所示的数组:
const questions = [
{_id: 1, q: 'why?', group: 'no-group', date: '8', selected: false },
{_id: 2, q: 'what?', group: 'group 1', date: '6', selected: false },
{_id: 3, q: 'when?', group: 'no-group', date: '7', selected: false },
{_id: 4, q: 'where?', group: 'group 1', date: '5', selected: false },
{_id: 5, q: 'which?', group: 'group 2', date: '3', selected: false },
{_id: 6, q: 'who?', group: 'no-group', date: '0', selected: false },
{_id: 7, q: 'why not?', group: 'group 2', date: '9', selected: false },
{_id: 8, q: 'who, me?', group: 'group 1', date: '4', selected: false },
{_id: 9, q: 'where is waldo?', group: 'group 1', date: '1', selected: false },
{_id: 10, q: 'which way is up?', group: 'no-group', date: '2', selected: false },
{_id: 11, q: 'when is lunch?', group: 'group-2', date: '10', selected: false },
];
Run Code Online (Sandbox Code Playgroud)
如何编写代码对其进行排序,以便按日期和组对对象进行排序。但是如果:假设第 1 组作为第二个对象出现,那么以下对象应该按日期排序为第 1 组,直到列出所有第 1 组对象,并且对于除具有'no-group'组属性值的对象之外的所有其他对象都相同。
所以对于上面的数组,我应该得到如下输出:
[
{_id: 6, q: 'who?', group: 'no-group', date: '0', selected: false },
{_id: 9, q: 'where is waldo?', group: 'group 1', date: '1', selected: false },
{_id: 8, q: 'who, me?', group: 'group 1', date: '4', selected: false },
{_id: 4, q: 'where?', group: 'group 1', date: '5', selected: false },
{_id: 2, q: 'what?', group: 'group 1', date: '6', selected: false },
{_id: 10, q: 'which way is up?', group: 'no-group', date: '2', selected: false },
{_id: 5, q: 'which?', group: 'group 2', date: '3', selected: false },
{_id: 7, q: 'why not?', group: 'group 2', date: '9', selected: false },
{_id: 11, q: 'when is lunch?', group: 'group 2', date: '10', selected: false },
{_id: 3, q: 'when?', group: 'no-group', date: '7', selected: false },
{_id: 1, q: 'why?', group: 'no-group', date: '8', selected: false },
];
// the spacing is just for easier readability.
Run Code Online (Sandbox Code Playgroud)
您可以通过date对相同组取消对象的排序、分组并获得平面数组。
const
questions = [{ _id: 1, q: 'why?', group: 'no-group', date: '8', selected: false }, { _id: 2, q: 'what?', group: 'group 1', date: '6', selected: false }, { _id: 3, q: 'when?', group: 'no-group', date: '7', selected: false }, { _id: 4, q: 'where?', group: 'group 1', date: '5', selected: false }, { _id: 5, q: 'which?', group: 'group 2', date: '3', selected: false }, { _id: 6, q: 'who?', group: 'no-group', date: '0', selected: false }, { _id: 7, q: 'why not?', group: 'group 2', date: '9', selected: false }, { _id: 8, q: 'who, me?', group: 'group 1', date: '4', selected: false }, { _id: 9, q: 'where is waldo?', group: 'group 1', date: '1', selected: false }, { _id: 10, q: 'which way is up?', group: 'no-group', date: '2', selected: false }, { _id: 11, q: 'when is lunch?', group: 'group 2', date: '10', selected: false }],
result = questions
.sort((a, b) => a.date - b.date)
.map((groups => o => {
if (o.group === 'no-group') return o;
if (groups[o.group]) {
groups[o.group].push(o);
return [];
}
return groups[o.group] = [o];
})({}))
.flat();
console.log(result);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)