代码
console.log("before .pop()");
console.log(this.selectorWindows);
var selectorWindow = this.selectorWindows.pop();
console.log(selectorWindow);
输出
before .pop()
[37: Object, 38: Object, 39: Object, 41: Object, 42: Object, 43: Object, 44: Object, 47: Object, 48: Object, 49: Object, 51: Object, 52: Object, 53: Object, 56: Object, 57: Object, 59: Object, 60: Object, 62: Object, 63: Object, 64: Object, 66: Object, 67: Object, 68: Object, 70: Object, 71: Object, 74: Object, 75: Object, 76: Object, 78: Object]
undefined
预期的输出
before .pop()
[37: Object, 38: Object, 39: Object, 41: Object, 42: Object, 43: Object, 44: Object, 47: Object, 48: Object, 49: Object, 51: Object, 52: Object, 53: Object, 56: Object, 57: Object, 59: Object, 60: Object, 62: Object, 63: Object, 64: Object, 66: Object, 67: Object, 68: Object, 70: Object, 71: Object, 74: Object, 75: Object, 76: Object]
78: Object
如果数组中有对象,.pop()
如何返回undefined
?没有异步代码,可以在使用this.selectorWindows
时修改.pop()
。
答案 0 :(得分:4)
如果那真的是一个数组,那么最新的元素是undefined
(我知道已经注释了)。数组在其序列中考虑任何类型的值,这总是取决于其原始长度。如果最新元素为undefined
,则它仍然是长度的一部分
有一些方法可以获得最后一个有效值(如果需要,可以删除它):
如果您想要对象,可以过滤该数组的每个元素并复制那些对象。然后你可以正常调用Array#pop,但如果数组是空的,你可以获得undefined
;
你可以做一个从结束开始到结束于该数组开始的循环,使其在找到你想要的元素时停止;
等......
例如
arr = this.selectorWindows
var arr, i, item
for (i = arr.length; --i >= 0;) {
item = arr[i]
if (item instanceof Object) {
arr.splice(i, 1)
break
}
}
// Now check if the latest item got in loop is an
// object
if (item instanceof Object)
// Use it
或者您可以过滤该数组:
arr = this.selectorWindows
var arr
filtered = arr.filter(value => value instanceof Object)
var filtered
// Now call Array#pop
filtered.pop()
答案 1 :(得分:0)
您似乎有一个稀疏数组,即包含许多undefined
值的数组。 pop()
基本上返回(并删除)arr[arr.length - 1]
。如果您的数组的length
属性(减1)指向undefined
的元素,那就是您将获得的内容。
答案 2 :(得分:0)
如果要将数组用作关联数组,请使用对象var myobject = {}
使用myarray[i] = myValue
填充数组不是一个好主意,因为你没有其他项之间的项目,这就是你得到undefined
的原因
示例: ``` var a = []; a [2] ='foo'; a.length => 3; a [30] ='bar'; a.length => 31 a [78] ='嗡嗡声'; a.length => 79;
var b = a.pop(); b => “嗡嗡”声; a.length => 78 a [77] =>未定义;
```
在[30]和[78] javascript之间填充具有未定义值的数组;
这就是你得到undefined
然后,如果要正确使用数组,请将对象推入数组或使用地图对象{}
如果你想删除具有更高id的对象,创建一个函数或在侧面使用一个包含id的数组,你对数组进行排序以得到最高的最新id。
答案 3 :(得分:-3)
这可能是一个类似阵列的结构。它仅包含.length
属性和通过索引访问,但它不包含.pop()
。
有Array.from
方法可用于将对象转换为数组。
let selectWinArray = Array.from(this.selectorWindows);
查看更多:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from