Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中使用数组连接字符串_Javascript_Arrays_String_Node.js - Fatal编程技术网

在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吗?它不管用吗?