Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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中的最后一个key:value对_Javascript_Object - Fatal编程技术网

如何删除JavaScript中的最后一个key:value对

如何删除JavaScript中的最后一个key:value对,javascript,object,Javascript,Object,我对JavaScript非常陌生,我正试图找出如何设置一个函数来删除右边的最后一个key:value对,就像数组的array.pop一样。这是我正在做的作业。这似乎让我感到困惑,因为从我对JS的有限理解来看,它们在对象的属性列表中没有特定的顺序。如果有人有任何见解,我将不胜感激。以下是对象: var array = {length:0, size:big, smell:strange}; 这是我开始着手的地方,但我只是很难完成这个功能: array.pop = function() { //.

我对JavaScript非常陌生,我正试图找出如何设置一个函数来删除右边的最后一个key:value对,就像数组的array.pop一样。这是我正在做的作业。这似乎让我感到困惑,因为从我对JS的有限理解来看,它们在对象的属性列表中没有特定的顺序。如果有人有任何见解,我将不胜感激。以下是对象:

var array = {length:0, size:big, smell:strange};
这是我开始着手的地方,但我只是很难完成这个功能:

array.pop = function() {
//...
};
我希望最终的结果是这样的:

array = {length:0, size:big};    

提前感谢。

对象没有任何已定义的属性顺序,因此没有“last”属性。必须按名称而不是位置删除属性


当然,您可以迭代属性并在迭代时检查它们,并通过查看其名称来决定是否要删除任何给定属性。某些javascript实现将保留添加属性的顺序,但ECMAScript规范并未明确保证这一点,因此无法依赖它。

对象没有任何已定义的属性顺序,因此没有“last”属性。必须按名称而不是位置删除属性

当然,您可以迭代属性并在迭代时检查它们,并通过查看其名称来决定是否要删除任何给定属性。一些javascript实现将保留添加属性的顺序,但ECMAScript规范并不保证这一点,因此它不能被依赖。

这将起作用

const car = {
  color: 'blue',
  brand: 'Ford'
}
let keys = Object.keys(car)
delete car[keys[keys.length-1]]
console.log(car)
这会奏效的

const car = {
  color: 'blue',
  brand: 'Ford'
}
let keys = Object.keys(car)
delete car[keys[keys.length-1]]
console.log(car)

这个答案适用于密钥是动态生成的数字(如0、1、2、3、4等)的情况

const myObject = {
  0: 'somestring',
  1: 42,
  2: false
};

delete myObject[`${Object.keys(myObject).length-1}`]
console.log(myObject);
输出:

对象{0:“somestring”,1:42}


当键是字符串时,这一行逻辑可能不好。所以,仔细使用它。

这个答案适用于密钥是动态生成的数字(如0、1、2、3、4等)的情况

const myObject = {
  0: 'somestring',
  1: 42,
  2: false
};

delete myObject[`${Object.keys(myObject).length-1}`]
console.log(myObject);
输出:

对象{0:“somestring”,1:42}



当键是字符串时,这一行逻辑可能不好。因此,请小心使用。

对象没有顺序,因此没有最后一个键。仅供参考,当数据结构不是数组时,命名变量
数组
不是一种好做法。您只是要求某人在理解或修改代码时出错。这就像是在故意误导读者。@jfriend00我不得不同意你的观点……我想我的教授已经疯了。。。他要求我们把它命名为数组。这有点奇怪,我想他是在鼓励人们跳出框框思考什么的。你确定数据不是这样的:
var-array=[{length:0},{size:big},{嗅觉:奇怪}]?然后,名称和问题都会更有意义。是的,任务基本上是用对象模拟数组。对象没有顺序,因此没有最后一个键。仅供参考,当数据结构不是数组时,命名变量
array
不是一个好的做法。您只是要求某人在理解或修改代码时出错。这就像是在故意误导读者。@jfriend00我不得不同意你的观点……我想我的教授已经疯了。。。他要求我们把它命名为数组。这有点奇怪,我想他是在鼓励人们跳出框框思考什么的。你确定数据不是这样的:
var-array=[{length:0},{size:big},{嗅觉:奇怪}]?那么,名称和问题都会更有意义。是的,任务基本上是用一个对象模拟一个数组。它们真的不符合顺序吗?这不是保证,但我没有看到任何订单没有被保留的情况……好吧,这就是我所想的……只是因为任务而有很多疑问。可能是个骗人的问题:)…谢谢你的帮助@FlashThunder—现代浏览器似乎能保持秩序,但我们不知道它们是否在所有情况下都能保持秩序。在任何情况下,如果您需要订单,那么应该使用不同的数据结构,而不是依赖于明确不保证的未记录行为。是的,只是好奇…:-)真的会发生这样的事情吗?这不是保证,但我没有看到任何订单没有被保留的情况……好吧,这就是我所想的……只是因为任务而有很多疑问。可能是个骗人的问题:)…谢谢你的帮助@FlashThunder—现代浏览器似乎能保持秩序,但我们不知道它们是否在所有情况下都能保持秩序。在任何情况下,如果您需要订单,那么应该使用不同的数据结构,而不是依赖于明确不保证的未记录行为。是的,只是好奇…:-)