我有一个对象:
let lastPosts = {
id1: {
date: new Date("10/10/2000 11:30:34"),
},
id2: {
date: new Date("10/10/2000 10:00:00"),
},
id3: {
date: new Date("10/10/2000 10:01:30"),
},
id4: {
date: new Date("11/10/2000 13:09:30"),
},
id5: {
date: new Date("8/10/2005 18:10:15"),
},
id6: {
date: new Date("11/10/2000 10:00:11"),
},
id7: {
date: new Date("10/10/2000 10:00:01"),
},
id8: {
date: new Date("15/10/2000 11:30:34"),
},
id9: {
date: new Date("7/10/2002 11:30:34"),
},
id10: {
date: new Date("8/10/2005 18:10:14"),
},
id11: {
date: new Date("11/10/2000 10:00:00"),
},
};
我需要确保“lastPosts”仅包含 9 个帖子(元素),删除剩余的最旧的帖子。
function deleteOldestLastPosts(lastPosts) {
if (Object.keys(lastPosts).length > 9) {
// What can I do here?
}
}
所以,我得到以下结果:
{
id1: {
date: new Date("10/10/2000 11:30:34"),
},
id3: {
date: new Date("10/10/2000 10:01:30"),
},
id4: {
date: new Date("11/10/2000 13:09:30"),
},
id5: {
date: new Date("8/10/2005 18:10:15"),
},
id6: {
date: new Date("11/10/2000 10:00:11"),
},
id8: {
date: new Date("15/10/2000 11:30:34"),
},
id9: {
date: new Date("7/10/2002 11:30:34"),
},
id10: {
date: new Date("8/10/2005 18:10:14"),
},
id11: {
date: new Date("11/10/2000 10:00:00"),
},
}
有什么想法吗?
最佳答案
按日期对所有值进行排序。从此排序数组中删除最新的 9 个元素,生成要删除的日期数组。然后循环遍历属性,如果它在数组中则将其删除。
function deleteOldestLastPosts(lastPosts) {
let values = Object.values(lastPosts);
if (values.length > 9) {
let datesToDelete = values.map(el => el.date).sort((a, b) => a - b);
datesToDelete.splice(-9);
Object.entries(lastPosts).forEach(([key, {
date
}]) => {
if (datesToDelete.includes(date)) {
delete lastPosts[key];
}
});
}
}
let lastPosts = {
id1: {
date: new Date("10/10/2000 11:30:34"),
},
id2: {
date: new Date("10/10/2000 10:00:00"),
},
id3: {
date: new Date("10/10/2000 10:01:30"),
},
id4: {
date: new Date("11/10/2000 13:09:30"),
},
id5: {
date: new Date("8/10/2005 18:10:15"),
},
id6: {
date: new Date("11/10/2000 10:00:11"),
},
id7: {
date: new Date("10/10/2000 10:00:01"),
},
id8: {
date: new Date("15/10/2000 11:30:34"),
},
id9: {
date: new Date("7/10/2002 11:30:34"),
},
id10: {
date: new Date("8/10/2005 18:10:14"),
},
id11: {
date: new Date("11/10/2000 10:00:00"),
},
};
deleteOldestLastPosts(lastPosts);
console.log(lastPosts);
关于Javascript - 删除 map 中最旧的元素(对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69470887/