【问题标题】:Javascript - Array parameter becomes concatenatedJavascript - 数组参数变为串联
【发布时间】:2017-11-22 07:53:25
【问题描述】:

我是 Javascript 新手,正在尝试将字符串数组作为参数传递给同步函数。在函数内部,数组被组合成一个字符串,我不知道为什么。输入是结构化的,因此我无法更改它。

module.exports = {
    myFunc: function (input) {
        console.log(input); //"string1string2,string3"

        var type = input[0];
        var val = input[1][0];
        console.log('type: ' + type +  ', val: ' + val) 
    }
}


myFunc(["string1", ["string2", "string3"]]); //'type: s, val: t' 

参数input 与所有三个字符串连接,变为string1string2,string3 并打印出'type: s, val: t'

【问题讨论】:

  • “完整”是什么意思?不要在input 上连接——别管它!只需展平并加入数组,然后返回。 input 仍然是原始数组。
  • 你遗漏了一些代码吗?假设拼写错误只是复制过来(在'string2'之后),你的函数不会返回任何东西。它唯一会做的就是console.log('type: string1, val: string2')
  • 您在 string2 中缺少双引号
  • 是的,这是一个复制粘贴错误
  • 我不确定你在这里想要完成什么,你能解释一下吗?您希望该功能到底做什么?我问这个的原因是你使用一个数组来存储实际上并不需要的特定对象。使用对象而不是数组可能会更好。

标签: javascript arrays node.js


【解决方案1】:

您提供的代码示例并未提供您声称的输出。

但是,我怀疑你可能有这样的事情:

const myFunc = function (input) {
  var type = input[0];
  var val = input[1][0];
  console.log('type: ' + type +  ', val: ' + val) 
}


myFunc("string1", ["string2", "string3"]); //'type: s, val: t' 

注意,我从您的示例中删除了外部数组。如果你只调用myFunc("string1"),你会得到你声称得到的输出。

我怀疑您缺少函数所期望的一级数组。

发生的事情是它作为字符串而不是数组被访问。

const str = 'abcdef';
console.log(str[0]);
console.log(str[1]);
console.log(str[1][0]);
console.log(str[1][1]);
console.log(str[1][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0][0]);

注意如何使用类似数组的语法访问字符串的单个字符。但是,与其他语言不同的是,在 JavaScript 中,字符串的单个字符仍然是字符串,因此您实际上可以无限次调用 [0] 并且仍然可以取回该字符。

【讨论】:

  • 感谢您的回答。因此,如果这在 Javascript 中是不可能的,那么肯定会发生一些事情。我在输入函数时添加了输入的console.log。我正在使用二维数组完全按照我的问题中的编写方式执行此操作。
  • 要么你没有完全按照你的想法来称呼它,要么你可能遇到了某种时髦的转译问题。你是用纯 JavaScript 写的吗?你在使用 Babel、TypeScript、Coffee 之类的东西吗?
  • 如果这不是一个时髦的转译,我几乎可以保证你传递给 'myFunc()' 的值已经被搞砸了。
  • 是的,它是纯 JavaScript。我将不得不做更多的挖掘工作以了解转译问题发生了什么
  • 请注意:我怀疑这是一个转译问题。如果是这样,那将是一个非常奇怪的事情。我的第一个怀疑是您传递给 myFunc() 的值不是您认为的那样。在查看转译问题之前,我会确保对其进行详尽的探索。
【解决方案2】:

您的 javascript 似乎运行良好,您可以在此处看到:

var myFunc = function (input) {
    var type = input[0];
    var val = input[1][0];
    console.log('type: ' + type +  ', val: ' + val) 
}

myFunc(["string1", ["string2", "string3"]]); //'type: s, val: t' 

我必须删除模块,以便我可以在 sn-p 中运行它

【讨论】:

  • 这不是我的代码在我的 nodejs 程序中的工作方式。它正在打印出'type: s, val: t' 这就是我问这个问题的原因
  • @McLovin 那么在您提供的代码示例和它将做什么之间存在一些不正确的地方。 Isac 表明它完全符合我在之前评论中提到的功能。
  • 我认为您必须发布更多代码以便我们为您提供帮助,您发布的功能看起来不错。
  • 这就是所有的代码。可能是 Node.js 的东西使它有可能做到这一点吗?
  • 检查我的答案。我想我知道发生了什么。
猜你喜欢
  • 2011-03-07
  • 2012-03-01
  • 2015-01-27
  • 2012-05-08
  • 2014-08-17
  • 2012-04-30
  • 2011-05-04
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多