Javascript - 删除 map 中最旧的元素(对象)

标签 javascript algorithm ecmascript-6

我有一个对象:

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/

相关文章:

javascript - 更改甜蜜警报2的Overlay背景颜色

c++ - 优化浮点除法和转换操​​作

algorithm - 这个空间复杂度在这个级数和中是如何计算的?

python - N == N 的数字和的某次幂(运行太慢)

javascript - 如何使用下划线 + ES 6 设计更高效的循环

javascript - jquery animate ul 按列表项

javascript - 如何在我的 .cshtml 页面中调用 Vue 组件?

javascript - bcrypt-nodejs 抛出的“不正确的参数” - Passport

javascript - 使用 ES6 导入节点模块时找不到模块的声明文件

javascript - react : How to sort data in asc and desc in ReactJS