尝试将数组作为参数传播到节点中join
的{{1}}方法中,但没有运气:
path
我明白了:
TypeError:path.join的参数必须是字符串
一种可能的解决方案是给方法一串参数。我甚至不知道这是否可能。但只是好奇,如果在这种情况下JavaScript中有一个技巧。或者我接近它完全错了?
答案 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指出它。