在Javascript中使用数组连接字符串
我不明白为什么这个测试失败:在Javascript中使用数组连接字符串,javascript,arrays,string,node.js,Javascript,Arrays,String,Node.js,我不明白为什么这个测试失败: it('should concat string and arr', function(done) { var str = "update userprofile set firstname = 'Barbara', lastname = 'Jensen', cellphone = '5638499', email = 'me@gmail.com', " var arr = ['computer', 'business'] str += "i
it('should concat string and arr', function(done) {
var str = "update userprofile set firstname = 'Barbara', lastname = 'Jensen', cellphone = '5638499', email = 'me@gmail.com', "
var arr = ['computer', 'business']
str += "interests = " + arr
var expected = "update userprofile set firstname = 'Barbara', lastname = 'Jensen', cellphone = '5638499', email = 'me@gmail.com', interests = ['computer', 'business']"
should(str).equal(expected)
done()
})
测试结果如下所示:
当你这样做的时候
"interests = " + arr
将调用该数组对象中的toString
方法。引用
Array
对象覆盖object
的toString
方法对于Array
对象,toString
方法连接数组并返回一个字符串,其中包含每个数组元素,每个数组元素之间用逗号分隔。例如,下面的代码创建一个数组,并使用toString
将数组转换为字符串
var monthNames = ['Jan', 'Feb', 'Mar', 'Apr'];
var myVar = monthNames.toString(); // assigns 'Jan,Feb,Mar,Apr' to myVar.
要修复测试用例,需要手动转换数组,如下所示
str += "interests = [" + monthNames.map(function(currentString) {
return "'" + currentString + "'";
}).join(", ") + "]";
当您将数组连接到字符串时,Javascript将自动连接出数组中的值 例如:
var str = 'my string'+[ 'my', 'arr' ];
var str = 'my string';
str+= JSON.stringify( [ 'my', 'arr' ]);
将产生:
"my stringmy,arr"
"my string["my","arr"]"
必须使用JSON.stringify
(或类似工具)序列化数组。例如:
var str = 'my string'+[ 'my', 'arr' ];
var str = 'my string';
str+= JSON.stringify( [ 'my', 'arr' ]);
将产生:
"my stringmy,arr"
"my string["my","arr"]"
问题是数组的外部方括号不是字符串的一部分,但您希望它们是字符串的一部分。如果您有:
var arr = '[computer, business]';
实现这一目标的另一种方法是自己动手:
var stringOfArr = "[" + arr.join(", ") + "]";
这就是在数组上调用
.toString
时发生的情况。您必须执行JSON.stringify或手动构建;var arr=[“aaa”,“bbb”];console.log(str+arr)调试它!它不像你想象的那样。数组的字符串表示形式更像一个列表,而不是数组。但是,我希望它是单引号字符串。JSON.stringify()怎么可能呢?是的,这就解决了问题。但是我希望它是一个单字符串数组。在JSON.stringify()之后,我希望它看起来像这样:['computer','business']
我这样做是为了在JSON.stringify()之后得到一个单引号字符串数组,str+=“interests=“+JSON.stringify(arr).replace(/“/g,”)
。谢谢你的指针。那不是数组。那是字符串。我编辑了变量名,你能详细解释一下为什么给-1吗?它不管用吗?