&引用;concat“;不将JavaScript数组连接在一起?
我正在Webkit上运行以下代码:&引用;concat“;不将JavaScript数组连接在一起?,javascript,arrays,Javascript,Arrays,我正在Webkit上运行以下代码: var scriptElements = document.scripts; var scriptUrls = []; // URL matching var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\
var scriptElements = document.scripts;
var scriptUrls = [];
// URL matching
var regexp = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/i;
for (var i = 0; i < scriptElements.length; i++) {
element = scriptElements[i];
var urls = element.innerHTML.match(regexp);
console.log('local', urls);
scriptUrls.concat(urls);
console.log('global', scriptUrls);
}
var scriptElements=document.scripts;
var scriptUrls=[];
//URL匹配
[a-z0-10-10-9%[a-z[a-z[a-z0-10-9-9%[a-z0-9-9%[a-z0-9-9-9%[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[a-z[[a-z[[[[w-[w-[[w-[[[w-[w-[[[[w-[w-]]]的[[[[[[[[[[w--]]]]]的[[[[[[[[[[[[[[[[[C--]]]]]]]]]的[[[[[[[[[[[[[[[[[[[[[[w-------]]]]]]]]]]]]]]]]]]]+以下以下以下以下以下::::::::]{};:“,«»””)/i;
对于(var i=0;i
我看到非空数组打印在“local”之后,但“global”始终保持为空数组。发生了什么事?
。concat
创建了一个新数组。您需要覆盖旧数组
scriptUrls = scriptUrls.concat(urls);
或者,如果要保留原始的
脚本URL
数组,可以.push()
中的值
scriptUrls.push.apply(scriptUrls, urls);
这使用.apply()
将URL
转换为传递给.push()
的单个参数。这样URL
的内容将作为单个项目添加到脚本URL
另外,请注意,
.concat()
会展平数组。如果需要数组数组,则可以使用脚本URL.push(URL)
concat不会更改此数组或作为参数提供的任何数组,而是返回一个“一级深度”副本,其中包含从原始数组组合的相同元素的副本
没错,人们在这方面经常误解JS。大多数数组和字符串方法都需要赋值来进行更改,例如
replace
或concat
,但其他方法则没有,例如splice
。@user1689607-是的,在我发表评论10秒后意识到了这一点。@elclanrs:我同意。我同意想想.splice
和.reverse
是唯一修改原始数组的方法。当然,没有字符串方法可以修改原始数组。因为字符串是不可变的。非常感谢!我想我不应该这么晚才尝试编写代码。在允许我的那一刻(第二刻)接受答案。使用apply()
非常棒,