"concat"没有将JavaScript数组连接在一起?

12 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()<>]+\)))*\))+(?:\(([^\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);
}
Run Code Online (Sandbox Code Playgroud)

我看到'local'后打印非空数组,但'global'总是保持为空数组.这是怎么回事?

I H*_*azy 48

.concat创建一个新的数组.你需要覆盖旧的.

scriptUrls = scriptUrls.concat(urls);
Run Code Online (Sandbox Code Playgroud)

或者,如果要保留原始scriptUrls数组,可以.push()使用值.

scriptUrls.push.apply(scriptUrls, urls);
Run Code Online (Sandbox Code Playgroud)

这用于.apply()转换urls为传递给的单个参数.push().这样,内容urlsscriptUrls作为单个项目添加.


另外,请注意使阵列.concat() 变平.如果你想要一个阵列数组,那你就可以使用了scriptUrls.push(urls).

  • 使用`apply()`很棒! (2认同)