【问题标题】:Join a string with an array in Javascript在 Javascript 中将字符串与数组连接起来
【发布时间】:2015-05-20 01:01:30
【问题描述】:

我不明白为什么这个测试失败了:

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()
})

测试结果如下:

【问题讨论】:

  • 当您在数组上调用 .toString 时会发生这种情况。您必须执行 JSON.stringify 或手动构建。
  • var str="xyz"; var arr = ["aaa","bbb"]; console.log(str+arr) 调试它!它不会做你认为它做的事情。
  • 数组的字符串表示看起来更像一个列表,而不是数组。

标签: javascript arrays string node.js


【解决方案1】:

当你这样做时

"interests = " + arr

将调用该数组对象中的toString 方法。引用Array.prototype.toString documentation

Array 对象覆盖了ObjecttoString 方法。 对于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(", ") + "]";

【讨论】:

  • 但是,我希望它作为单引号字符串。 JSON.stringify() 怎么可能?
  • 是的,解决了它。但我希望它作为一个单一的字符串数组。
  • 在 JSON.stringify() 之后,我希望它看起来像这样:['computer', 'business']
  • 我这样做是为了在 JSON.stringify(), str += "interests = " + JSON.stringify(arr).replace(/"/g, "'") 之后得到一个单引号字符串数组。谢谢指点。
【解决方案2】:

当您将数组连接到字符串时,Javascript 会自动连接数组内的值。

例如:

var str = 'my string'+[ 'my', 'arr' ];

将产生:

"my stringmy,arr"

您必须使用JSON.stringify(或类似方法)对数组进行序列化。例如:

var str = 'my string';
str+= JSON.stringify( [ 'my', 'arr' ]); 

将产生:

"my string["my","arr"]"

【讨论】:

    【解决方案3】:

    问题是数组的外部方括号不是字符串的一部分,但您希望它们是。如果你有它会工作:

     var arr = '[computer, business]';
    

    实现此目的的另一种方法是自己做:

    var stringOfArr = "[" + arr.join(", ") + "]";
    

    【讨论】:

    • 那不是数组。那是一个字符串。
    • 我编辑了变量名,你能详细说明你为什么给 -1 吗?没用吗?
    猜你喜欢
    • 2017-10-11
    • 2014-08-30
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多