有没有办法slice() JavaScript对象?

假设我有一个对象x = {a:1, b:2, c:3, d:4},我该如何砍掉它的第一个属性(就像在数组上使用.slice(1)方法一样),所以得到x = {b:2, c:3, d:4}

在这里(可以追溯到几年前)多次提出相同的问题,但没有一个人得到答案,这完全可以提供我需要的解决方案,并且看起来到今天为止已经过时了。

最佳答案

该答案在很大程度上取决于问题中是否缺少定义的键顺序条件。如果定义了键顺序,则解决方案变得很容易,因为可以创建转换或排序算法来以确定的顺序处理键。

由于评论中的冗长讨论已得到结论性证明,由于该问题并未明确说明键的顺序标准,因此没有安全的方法来保证以任何方法切成薄片的元素的确是人类观察者认为的元素。作为“第一要素”。

@JordanRunning提到的article已经声明将具有整数值或整数可转换值的键放在首位。

之后,@ Paulpro提到Object.getOwnPropertyNames和Reflect.ownKeys的顺序是有保证的,但是自ES6开始,Object.keys和Object.entries的顺序是没有保证的。

如果元素只是问题中的这4个键,则一旦确保顺序按时间顺序排列为字符串键,则使用Object.getOwnPropertyNames或Reflect.ownKeys的答案将是可能的。但是,一旦我们不知道是否会有一个具有整数(或整数可转换)名称的属性,甚至不知道z元素之后会发生什么,就没有定论。

例如:假设对象键最初是字母顺序的。 z之后会发生什么?下一个键是aa,ab等?如果是,那么...但是还有很多其他可能性...如果z到1之后怎么办?还是如果是非标准字符的西里尔字母?例如,葡萄牙语带有重音字母,在某些算法中,字母紧跟在所有其他字母之后。因此,您有一个A排在最前面,一个Á在Z后面。如果创建该对象的算法错误地将其排序,并且按时间顺序排列错了怎么办?

底线:无法使用对象。请改用Map,数组或任何其他解决方案,或者按已声明的顺序定义键顺序。

07-24 09:44
查看更多