我正在尝试从全局变量-title返回带连字符的字符串。我很难理解为什么此功能将不起作用,而另一个功能却会改变全局变量。
当我没有将String和Array方法分配给我收到的变量时,“ x”不是函数错误。当我确实将它们分配给变量时,这些函数会产生正确的输出,但会修改全局变量。 收到“ x”不是函数错误:
function urlSlug(title) {
title.toLowerCase().split(" ");
title.filter(el => {return el});
title.join("-");
return title;
}
更改全局变量:
function urlSlug(title) {
var arr = title;
var arr1 = arr.toLowerCase().split(" ");
var filtered = arr1.filter(el => {return el});
var arr2 = filtered.join("-");
console.log(arr2);
return arr2;
}
答案 0 :(得分:0)
function urlSlug(title) {
// split() return a new array; don't modify variable in place.
title.toLowerCase().split(" ");
title.filter(el => {return el}); // Consequently, title is not an array but a string. Filter is not defined. So it throws an error
title.join("-");
return title;
}
这就是为什么:TypeError:title.filter不是一个函数。函数将不返回任何内容。
一种实现此目的的方法是:
function urlSlug(title) {
let splitted = title.toLowerCase().split(" ");
splitted = splitted.filter(el => el);
return title.join("-");
}
或一行:
function urlSlug(title) {
return title.split(" ").filter(el=>el).join("-");
}