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以及其他数组方法的呀,
为什么输出的结果不同呢?

大家可以给我点建议吗,我困扰一天了。。。

阅读 1.6k
1 个回答

啊? 这不是都是按照预期输出了吗??? 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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题