Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于非emty数组,返回未定义的数组_Javascript - Fatal编程技术网

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()