【发布时间】:2019-10-25 19:35:32
【问题描述】:
我有一个带有键和数据的对象。从一个键我想得到上一个项目。
我以前见过类似的主题,但解决方案确实很复杂。
我还添加了一个不起作用的功能,但我希望它会起作用
简化代码
let obj = {
slug: 'my-page',
title: 'My title',
description: 'My description',
content: 'My content'
};
let previous = obj.previousItem('description'); // Does not work
console.log(previous);
预期结果
{ 标题:'我的标题' }
- ES5 甚至 ES6 都可以
- 我更喜欢简单的解决方案而不是复杂的解决方案,可能没有循环
【问题讨论】:
-
如果你依赖顺序,你应该使用数组。
-
一般来说,对象属性是无序的。
-
虽然现在大多数浏览器都有固定的迭代顺序,但在最新版本之前的所有 JS 版本的规范并不能保证属性的顺序。因此,如果您必须 100% 确定某物的顺序,请使用数组。在这种情况下,它相当简单。一个基本的“分页”包装器,您可以在其中保存当前索引并将
.prev()和.next()减去/添加到索引并返回。可以使用迭代器制作更复杂的版本。 -
数组的替代方案是 Map,它将保留插入顺序。但总的来说,有很多 dupes 用于此。
标签: javascript object ecmascript-6 ecmascript-5