gpt4 book ai didi

javascript - 格式化 Javascript 数据数组

转载 作者:行者123 更新时间:2023-12-03 12:04:56 25 4
gpt4 key购买 nike

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

简单地说,我正在解析聊天数据,将文本转换为 Twitter 链接、主题标签、/命令,或者如果不是这三者中的任何一个,则将其保留为文本。下面是我的调试代码。

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

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

当我运行 format.apply(undefined,context('@joeblow is my username')); 时,它只返回 [twitter]@joeblow。它应该打印类似 [twitter]@joeblow [default]is [default]my [default]username 的内容。在现实场景中,@joeblow 将是链接到 @joeblows 配置文件的 HTML(下面的伪代码只是为了简洁起见)。

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

function preformat(message) {
format_message = {
'#': 'hashtag',
'/': 'command',
'@': 'twitter'
}
var char = message.charAt(0);
var type = format_message[char];
if (type) {
return type;
} else {
return 'default';
}
}

function context(input) {
var message = [];
var words = input.split(' ');
for (var i=0;i<words.length;i++) {
message[i] = words[i];
}
return message;
}

function format(message) {
var type = preformat(message);
format.types = {
'command': function(type, message) { return '[command]' + message; },
'hashtag': function(type, message) { return '[hashtag]' + message; },
'twitter': function(type, message) { return '[twitter]' + message; },
'default': function(type, message) { return '[default]' + message; }
}
var parse = format.types[type];
return parse(type,message);
}

我正在使用以下命令执行此操作:

format.apply(undefined,context('@joeblow is my username'));

最佳答案

您遇到的问题是,当您使用 apply 将分割字符串作为单独的参数传递给 format 时,您实际上在该函数中没有任何地方进行迭代对于这些争论。

.apply 不会自动为您执行此操作 - 您必须要么使用显式循环,要么使用像 .map 这样的函数隐式循环数组。

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

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

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

关于javascript - 格式化 Javascript 数据数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com