slice 在我的阵列上没有按预期工作
slice not working as expected on my array
我有一个从网页上抓取的数组:
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
在控制台里面returns一个数组:
我需要做的是子集这个数组:
- 从第三项开始
- 然后保留每奇数个项目
所以我需要我的 var 的一个子集,其中包含项目 3 和 5。
我试过了:myvar.slice(3,5)
。这返回了错误 "Undefined is not a function"
如果我成功了,我会得到一个包含 3 个项目的数组。然后我需要对数组中的奇数项进行子集化。
如何为 myvar 设置子集,以便我有一个包含项目 3 和 5 的变量?
如果 myvar 的长度为 10。我如何将其子集化以包括项目 3、5、7、9?
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
myvar 是一个 nodeList 而不是数组。所以你不能在那里使用数组函数。
但是您可以使用 apply
或 call
来获取节点列表上的数组功能。
如何获得这些功能?
Array.prototype.slice.call(myvar, 3,5);
现在您可以在节点列表中使用 slice
。
但是对于您的实际问题,也无法通过切片获得仅匹配特定条件的子集。
您必须遍历元素并手动完成。
I tried: myvar.slice(3,5). This returned error "Undefined is not a function"
是的,因为 querySelectorAll
returns 是节点列表而不是数组。另见 Fastest way to convert JavaScript NodeList to Array?。
How do I subset for myvar so that I have a variable with items 3 and 5 left in it? If myvar was length 10. How would I subset it to include items 3, 5, 7, 9?
无论如何您都需要手动执行此操作,javascript 中没有这样的方法来使用步骤对子序列进行切片。使用
var arr = [],
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr');
for (var i=3; i<myvar.length; i+=2)
arr.push(myvar[i]);
(或者,如果你想花哨的话)
var arr = Array.prototype.filter.call(document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr'), function(_, i) {
return i%2==1 && i>2;
});
首先你应该将你的 NodeList 结果转换为 js 中的实际数组,然后在其上使用 slice 方法。
将 NodeList 转换为 Array 的最佳方法是:
myvar = Array.from(myvar);
现在您可以轻松地在数组上使用 slice 方法:
myvar.slice(3,5);
我有一个从网页上抓取的数组:
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
在控制台里面returns一个数组:
我需要做的是子集这个数组:
- 从第三项开始
- 然后保留每奇数个项目
所以我需要我的 var 的一个子集,其中包含项目 3 和 5。
我试过了:myvar.slice(3,5)
。这返回了错误 "Undefined is not a function"
如果我成功了,我会得到一个包含 3 个项目的数组。然后我需要对数组中的奇数项进行子集化。
如何为 myvar 设置子集,以便我有一个包含项目 3 和 5 的变量? 如果 myvar 的长度为 10。我如何将其子集化以包括项目 3、5、7、9?
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr')
myvar 是一个 nodeList 而不是数组。所以你不能在那里使用数组函数。
但是您可以使用 apply
或 call
来获取节点列表上的数组功能。
如何获得这些功能?
Array.prototype.slice.call(myvar, 3,5);
现在您可以在节点列表中使用 slice
。
但是对于您的实际问题,也无法通过切片获得仅匹配特定条件的子集。
您必须遍历元素并手动完成。
I tried: myvar.slice(3,5). This returned error "Undefined is not a function"
是的,因为 querySelectorAll
returns 是节点列表而不是数组。另见 Fastest way to convert JavaScript NodeList to Array?。
How do I subset for myvar so that I have a variable with items 3 and 5 left in it? If myvar was length 10. How would I subset it to include items 3, 5, 7, 9?
无论如何您都需要手动执行此操作,javascript 中没有这样的方法来使用步骤对子序列进行切片。使用
var arr = [],
myvar = document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr');
for (var i=3; i<myvar.length; i+=2)
arr.push(myvar[i]);
(或者,如果你想花哨的话)
var arr = Array.prototype.filter.call(document.querySelectorAll('#tblItineraryModuleStayDetail > tbody > tr'), function(_, i) {
return i%2==1 && i>2;
});
首先你应该将你的 NodeList 结果转换为 js 中的实际数组,然后在其上使用 slice 方法。
将 NodeList 转换为 Array 的最佳方法是:
myvar = Array.from(myvar);
现在您可以轻松地在数组上使用 slice 方法:
myvar.slice(3,5);