Javascript 对于非emty数组,返回未定义的数组
代码Javascript 对于非emty数组,返回未定义的数组,javascript,Javascript,代码 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, 4
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
预期输出
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()
如何返回未定义的
?没有异步代码可以修改。在使用.pop()
时选择Windows
,您似乎有一个稀疏数组,即数组中有许多未定义的值pop()
基本上返回(并删除)arr[arr.length-1]
。如果数组的length
属性(减1)指向一个未定义的元素,您将得到该元素。这可能是一个类似数组的结构。它只包括.length
属性和通过索引的访问,但不包括.pop()
。
有一个Array.from
方法可用于将对象转换为数组
let selectWinArray = Array.from(this.selectorWindows);
请参阅更多信息:如果这确实是一个数组,那么最新的元素是未定义的
(我知道已经注释过了)。数组考虑它们序列中的任何类型的值,这总是取决于其本机长度。如果最新的元素未定义
它仍然是长度的一部分
但是,有一些方法可以获取最后一个有效值(如果需要,可以将其删除):
- 如果需要对象,可以过滤该数组的每个元素并复制这些对象。然后可以正常调用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()
如果要将数组用作关联数组,请使用对象var myobject={}
用myarray[i]=myValue
填充数组不是一个好主意,因为其他数组之间没有项,这就是为什么未定义的原因
例如:
```
var a=[];
a[2]=“foo”;
a、 长度=>3;
a[30]=“巴”;
a、 长度=>31
a[78]=“嗡嗡声”;
a、 长度=>79
var b=a.pop();
b=>嗡嗡声;
a、 长度=>78
a[77]=>未定义
```
在[30]和[78]javascript之间,用未定义的值填充数组;
这就是为什么您得到了未定义的
然后,如果要正确使用数组,请将对象推入数组或使用贴图对象{}
如果要删除id较高的对象,请创建一个函数或在旁边使用一个数组,该数组包含id,然后对数组进行排序,以获得最高的最新id。您的数组看起来很奇怪-为什么它从元素37
开始?数组不同,我的意思是它看起来像一个对象数组,但它不是<如果数组不是空的,code>Array.prototype.pop
将永远不会返回undefined
。@Tresdin[undefined].pop()
?@undefined现在我们知道您的用户名是如何获得的:)解决方案在哪里注意数组值与其长度
同步?然后注释itOP主要询问原因。没有更多的上下文,很难想出具体的解决方案。但是,提供它不能按预期工作的原因可能有助于OP为自己开发一个解决方案。但无论如何,这只是一个评论。你的答案不能提供解决方案。有人已经因为同样的原因否决了我,所以我确信。。。我对一个问题的完美回答与此目标相同,而且有许多字符,他们否决了我,如果是这样的话,控制台错误会显示没有pop
方法-它不会神奇地返回未定义。类似数组的对象可以在其原型中有一个.pop()
。是的,这是不可能的,但这就是为什么我包含了一个“这可能是”。一个出现故障的.pop()