Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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 - Fatal编程技术网

格式化Javascript数据数组

格式化Javascript数据数组,javascript,Javascript,此代码用于网络聊天。我希望这段代码检查每个单词,然后将twitter@joeblow用户名格式化为twitter profile链接 简单地说,我正在解析聊天数据,将文本转换为twitter链接、hashtags、a/command,或者如果不是这三者中的任何一个,就将其保留为文本。下面是我的调试代码 我正在尝试学习如何使用apply或call,但我并不完全理解它们。就代码而言,它应该接受上下文数组,并将format函数应用于数组中的每个项 请注意,这是我第一次尝试使用apply(),我不确定我

此代码用于网络聊天。我希望这段代码检查每个单词,然后将twitter@joeblow用户名格式化为twitter profile链接

简单地说,我正在解析聊天数据,将文本转换为twitter链接、hashtags、a/command,或者如果不是这三者中的任何一个,就将其保留为文本。下面是我的调试代码

我正在尝试学习如何使用apply或call,但我并不完全理解它们。就代码而言,它应该接受上下文数组,并将format函数应用于数组中的每个项

请注意,这是我第一次尝试使用apply(),我不确定我做错了什么

当我运行
format.apply(未定义,上下文(“@joeblow是我的用户名”)
它只返回
[twitter]@joeblow
。它应该打印类似于
[twitter]@joeblow[default]是[default]我的[default]用户名
。在真实场景中,@joeblow将是链接到@joeblows概要文件的HTML(下面的伪代码只是为了简单起见)

我希望format()函数应用于传递的每个单词。context()函数只是获取传入的数据并将其放入数组中。我知道我可以编写for循环,但我正在尝试学习如何使用apply()/call()


您遇到的问题是,当您使用
apply
将拆分字符串作为单个参数传递给
format
时,该函数中没有任何地方实际迭代这些参数

.apply
不会自动为您执行此操作-您必须使用显式循环,或者使用类似
.map
的函数隐式循环数组

.apply
的主要用途是,当您事先不知道要传递多少参数给需要单独参数而不是数组的函数时,调用函数

由于
format
函数实际上只接受一个参数并返回该参数的格式化版本,因此请尝试以下操作:

context("@joeblow is my username").map(format).join(' ');

你忘了用
var
声明一些变量,它们正在泄漏到全局范围。我仍然有点不明白你想实现什么,但是什么时候写for循环不是一个好的方法来做需要循环的事情呢?我的意思是你也可以使用map…@Scottmithell我正在尝试学习如何使用apply或call,但我并不完全理解它们。就代码而言,它应该接受上下文数组,并将format函数应用于数组中的每个项。我将更新我的描述。在这个例子中,我看不出你在哪里使用applyc/call,这是令人困惑的。但根本的区别在于apply是一个参数数组,而call是一个列表。他们做同样的事。。来源:谢谢你的澄清,@Scottmithell。我确实读过,但我正在读您给出的MDN示例,它使用对象来表示.call();编辑:好的,我现在明白你的意思了。我认为call()是用于字符串的…所以我肯定应该使用apply(),但我不确定我做错了什么。我代码的最后一行显示了我用来执行这个的那一行。啊,好的。非常感谢。在您发布此消息前几分钟,我已使用
map
找到了解决方案,但我接受此消息,因为它回答了我有关
apply
的问题。
format.apply(undefined,context('@joeblow is my username'));
context("@joeblow is my username").map(format).join(' ');