【问题标题】:Node js .replace() is not a functionNode js .replace() 不是函数
【发布时间】:2018-02-17 08:17:17
【问题描述】:
当我在节点 js 中运行此代码时,我得到 TypeError: filter_list.replace is not a function,我也尝试过使用 toString 但这似乎没有帮助,有人可以帮忙吗?
var filter_list =["abcd","efgh"];
filter_list.join();
return filter_list.replace(/,/g, ' AND filter:');
【问题讨论】:
标签:
javascript
arrays
node.js
string
replace
【解决方案1】:
var filter_list = [ "abcd", "efgh" ] 表示filter_list 是Array。 replace 属性函数只适用于String。
您的Array.join() 调用不会将现有数组Array 实例转换(变异)为String - 而是返回一个包含连接内容的新字符串。
你会想要这个:
var filter_list = ["abcd","efgh"];
var filter_list_as_string = filter_list.join();
return filter_list_as_string.replace(/,/g, 'AND filter:');
或者更简洁:
return ["abcd","efgh"].join().replace(/,/g, 'AND filter:');
我建议您使用 TypeScript 而不是 JavaScript 为 Node 编程 - 因为它会为您捕捉这些打字问题。
【解决方案2】:
arr.join返回一个字符串,它不会改变数组本身。
var filter_list =["abcd","efgh"];
var str = filter_list.join();
return str.replace(/,/g, ' AND filter:');
【解决方案3】:
因为join 不会就地更改变量,而是返回另一个修改后的变量,所以您的代码应该是:
var filter_list =["abcd","efgh"];
filter_list = filter_list.join(); // assign the joined array back to the variable
console.log(filter_list.replace(/,/g, ' AND filter:'));
【解决方案4】:
.join() 不会改变原始对象。正确的代码应该是:
var filter_list =["abcd","efgh"];
var joined_list = filter_list.join();
return joined_list.replace(/,/g, ' AND filter:');
【解决方案5】:
您也可以使用toString(),
var filter_list =["abcd","efgh"];
filter_list = filter_list.toString().replace(/,/g, ' AND filter:');
console.log(filter_list)
【解决方案6】:
使用带有参数的 Array.join。
var filter_list =["abcd","efgh"];
console.log(filter_list.join(' AND filter:'));