js数组使用pop方法输出结果有误(类数组),代码错在哪里呢??
xx01=[ {
"dag_id": "aassds",
"task_id": "RWER"
},
{
"dag_id": "aassds",
"task_id": "WQE"
},
{
"dag_id": "aassds",
"task_id": "WR"
}
]
console.log(xx01[1])
let xc = xx01.pop(1)
console.log(xx01)
console.log("----------")
console.log(xc)
console.log("----------")
//下面是输出结果:
{ dag_id: 'aassds', task_id: 'WQE' }
[
{ dag_id: 'aassds', task_id: 'RWER' },
{ dag_id: 'aassds', task_id: 'WQE' }
]
----------
{ dag_id: 'aassds', task_id: 'WR' }
----------
可以看到这个数组xx调用pop(1)方法,之后改变后的数组xx却删除了xx[2]的数据,非常奇怪。
而对于
xx02= ["Python", "Java", "JavaScript"]xc = xx02.pop(1)
print(xx02)
#输出结果
#['Python', 'JavaScript']
可以看到这个是完美符合要求的。
难道是存储对象的数组删除调用pop方法删除数据有不同之处吗?
我在网上搜了一下类数组概念---
一个类数组对象:
具有:指向对象元素的数字索引下标以及 length 属性告诉我们对象的元素个数;
不具有:诸如 push 、 forEach 以及 indexOf 等数组对象具有的方法;
看起来,我定义的xx01数组像是个类数组,但是我是可以直接使用pop以及其他数组方法的呀,
为什么输出的结果不同呢?
大家可以给我点建议吗,我困扰一天了。。。
回答:
啊? 这不是都是按照预期输出了吗??? pop()
是移除数组的最后一项啊?
var xx01=[ { "dag_id": "aassds", "task_id": "RWER" },
{ "dag_id": "aassds", "task_id": "WQE" },
{ "dag_id": "aassds", "task_id": "WR" }
]
console.log(xx01[1])
// {dag_id: 'aassds', task_id: 'WQE'}
var xc = xx01.pop(1) // 移除数组中的最后一项,传入的参数 1 其实是无意义的
console.log(xx01)
// (2) [{…}, {…}]
// 0: {dag_id: 'aassds', task_id: 'RWER'}
// 1: {dag_id: 'aassds', task_id: 'WQE'}
console.log(xc)
// {dag_id: 'aassds', task_id: 'WR'}
如果你是想删除数组的第n项,那么你就不能用 pop()
这个方法。需要使用 splice()
这个方法来操作具体如下:
var xx01=[ { "dag_id": "aassds", "task_id": "RWER" },
{ "dag_id": "aassds", "task_id": "WQE" },
{ "dag_id": "aassds", "task_id": "WR" }
]
console.log(xx01[1])
// {dag_id: 'aassds', task_id: 'WQE'}
var xc = xx01.splice(1,1) // 数组下标1开始,移除1项元素
console.log(xx01)
// (2) [{…}, {…}]
// 0: {dag_id: 'aassds', task_id: 'RWER'}
// 1: {dag_id: 'aassds', task_id: 'WR'}
console.log(xc)
// {dag_id: 'aassds', task_id: 'WQE'}
不同语言之间还是会有一些差别的。并不能直接套用原来对于一些API的理解。还是需要看一下文档的。
相关阅读
Array.prototype.pop() - JavaScript | MDN
Array.prototype.splice() - JavaScript | MDN
以上是 js数组使用pop方法输出结果有误(类数组),代码错在哪里呢?? 的全部内容, 来源链接: utcz.com/p/932969.html