Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
切片JavaScript对象_Javascript_Ecmascript 6 - Fatal编程技术网

切片JavaScript对象

切片JavaScript对象,javascript,ecmascript-6,Javascript,Ecmascript 6,有没有办法分割JavaScript对象 假设我有一个对象x={a:1,b:2,c:3,d:4},我如何切掉它的第一个属性,就像我在数组上使用.slice1方法一样,所以我得到x={b:2,c:3,d:4} 同样的问题在几年前曾多次在这里提出,但没有一个得到答案,这正好提供了我需要的解决方案,而且到今天为止似乎已经过时了。使用切片和贴图功能可以解决这个问题 var obj = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};

有没有办法分割JavaScript对象

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


同样的问题在几年前曾多次在这里提出,但没有一个得到答案,这正好提供了我需要的解决方案,而且到今天为止似乎已经过时了。

使用切片和贴图功能可以解决这个问题

    var obj = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};

 var result = Object.keys(obj).slice(0,2).map(key => ({[key]:obj[key]})); 

console.log(result);
那就有结果了

[ { '0': 'zero' }, { '1': 'one' } ]

Use可以通过使用slice和map函数解决此问题

    var obj = {0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four'};

 var result = Object.keys(obj).slice(0,2).map(key => ({[key]:obj[key]})); 

console.log(result);
那就有结果了

[ { '0': 'zero' }, { '1': 'one' } ]
这个答案在很大程度上取决于问题中缺少定义的关键顺序标准。如果定义了密钥顺序,则解决方案变得简单,因为可以创建转换或排序算法以按确定的顺序处理密钥

正如评论中冗长的讨论所证明的那样,由于问题没有明确说明键顺序的标准,因此没有安全的方法来保证通过任何方法分割的元素确实是人类观察者认为的第一个元素

@JordanRunning所提到的已经声明,具有整数值或可转换整数值的键被放在第一个元素中

之后@Paulpro提到Object.getOwnPropertyNames和Reflect.ownKeys具有保证顺序,但Object.keys和Object.entries自ES6以来没有保证顺序

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

例如:假设对象键最初按字母顺序排列。z之后会发生什么?下一个键是aa、ab等?如果是,好的。。。但是还有很多其他的可能性。。。如果z之后是1呢?或者,如果这是西里尔语,有非标准字符?例如,葡萄牙语有重音字母,对于某些排序算法来说,重音字母排在所有其他字母之后。首先是A,然后是Z。如果创建对象的算法因此错误地对其排序,并且时间顺序错误,该怎么办

底线:不可能使用对象。使用Map、数组或任何其他解决方案,或者如alredy所述定义键顺序。

这个答案在很大程度上取决于问题中没有定义键顺序标准。如果定义了密钥顺序,则解决方案变得简单,因为可以创建转换或排序算法以按确定的顺序处理密钥

正如评论中冗长的讨论所证明的那样,由于问题没有明确说明键顺序的标准,因此没有安全的方法来保证通过任何方法分割的元素确实是人类观察者认为的第一个元素

@JordanRunning所提到的已经声明,具有整数值或可转换整数值的键被放在第一个元素中

之后@Paulpro提到Object.getOwnPropertyNames和Reflect.ownKeys具有保证顺序,但Object.keys和Object.entries自ES6以来没有保证顺序

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

例如:假设对象键最初按字母顺序排列。z之后会发生什么?下一个键是aa、ab等?如果是,好的。。。但是还有很多其他的可能性。。。如果z之后是1呢?或者,如果这是西里尔语,有非标准字符?例如,葡萄牙语有重音字母,对于某些排序算法来说,重音字母排在所有其他字母之后。首先是A,然后是Z。如果创建对象的算法因此错误地对其排序,并且时间顺序错误,该怎么办


底线:不可能使用对象。使用映射、数组或任何其他解决方案,或者如alredy所述定义键顺序。

对象中没有第一个属性。对象是无序的,所以每个键都像其他键一样声称是第一个。您提出的任何解决方案都有可能从对象中删除任何单个元素,具体取决于您运行它的JavaScript引擎/实现。仅供参考:因为ES2015顺序保证为插入顺序,除非它们解析为int。@rlemon是正确的。这包括Object.entries,但不包括Object.keys,用于向后兼容
原因。链接的文章包括ES2015规范的链接和引用以及其他资源。不,但可以说对象键实际上仍然不能保证按照您声明它们的方式排序。只有字符串键是,这是一个足够大的例外,足以证明任何人声称使用es2015+函数生成对象键的方式与您定义它们的方式完全一致这一事实是明显错误的。这是不可靠的。您可以信赖的是,在那里使用ES2015+函数至少会有一个订单,因此每次相同的调用都会产生相同的订单,这在ES2015之前的版本中是不保证的slightest@Mike“Pomax”kamerman的底线:不要这样做。对象中没有第一个属性。对象是无序的,所以每个键都像其他键一样声称是第一个。您提出的任何解决方案都有可能从对象中删除任何单个元素,具体取决于您运行它的JavaScript引擎/实现。仅供参考:因为ES2015顺序保证为插入顺序,除非它们解析为int。@rlemon是正确的。出于向后兼容性原因,这包括Object.entries,但不包括Object.keys。链接的文章包括ES2015规范的链接和引用以及其他资源。不,但可以说对象键实际上仍然不能保证按照您声明它们的方式排序。只有字符串键是,这是一个足够大的例外,足以证明任何人声称使用es2015+函数生成对象键的方式与您定义它们的方式完全一致这一事实是明显错误的。这是不可靠的。您可以信赖的是,使用ES2015+函数至少有一个订单,因此每次相同的调用都会产生相同的订单,2015年之前的哪一项不是slightest@Mike“Pomax”Kamermans的底线是:不要这样做。你的意思是,这可能会导致某些JavaScript实现中出现这种情况。因此,他不需要JavaScript中的ans??他需要的是一个正确的答案,或者只是一个注释和一个接近投票,也就是说,如果需要顺序,使用映射而不是对象。在JavaScript中分割对象是没有意义的。你的意思是,在某些JavaScript实现中可能会导致这种情况。因此,他不需要JavaScript中的ans??他需要的是一个正确的答案,或者只是一个注释和一个接近投票,也就是如果需要顺序,使用映射而不是对象。在JavaScript中分割对象是没有意义的。