如果输入是JavaScript中的数组数组,如何传播参数

时间:2015-05-06 03:34:15

标签: javascript node.js

尝试将数组作为参数传播到节点中join的{​​{1}}方法中,但没有运气:

path

我明白了:

  

TypeError:path.join的参数必须是字符串

一种可能的解决方案是给方法一串参数。我甚至不知道这是否可能。但只是好奇,如果在这种情况下JavaScript中有一个技巧。或者我接近它完全错了?

2 个答案:

答案 0 :(得分:9)

您正在将数组推送到数组上,从而产生

var url: NSURL = NSBundle.mainBundle().URLForResource("MyResourceFile", withExtension: "plist")!

var myArray: NSArray = NSArray.alloc()
myArray.init(url) // <-- Error: "Unexpected trailing closure"

[ __dirname, [ 'app', 'js' ] ] 不知道如何处理这些嵌套数组。 path.join并没有以某种方式神奇地压缩其输入。来自apply的错误消息不能更清楚:它希望它的参数是字符串,而不是数组。因此,请使用path.join来组合数组:

concat

另一种选择是

var path = require("path");
var paths = [__dirname];
var userInput = ["app", "js"];

// Use concat here
paths = paths.concat(userInput);

var target = path.join.apply(null, paths);

会将paths.push.apply(paths, userInput); 的元素逐个推送到userInput

如果您使用的是ES6,那么您可以使用spread运算符并将其写为:

paths

paths.push(...userInput)

或直接

paths = [...paths, ...userInput]

答案 1 :(得分:1)

实际上问题在于我正在过度思考这个问题。我没有将paths数组与另一个数组连接起来,而是将数组推入了路径数组:

var path = require("path");
var paths = [__dirname];
var userInput = ["app", "js"];
paths.push(userInput); // x

只需paths.concat(userInput)就可以避免这个问题。然后你可以传播参数:

path.join.apply(null, paths.concat(userInput));

感谢@torazaburo指出它。