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

回到顶部