创建一个函数,该函数采用多个字符串参数并将它们全部打印在一起



我对JavaScript很陌生,不太了解函数工作所需的定义。

var ShowWords = ['Olá,','sabia','que', 'ta', 'tudo', 'bem?']
for(var i=0; i<ShowWords.length; i++){
console.log(ShowWords[i]);
}

而且我不明白为什么上面的代码有效而下面的代码不起作用,它只给了我"未定义">

function ShowWords(pal1,pal2,pal3,pal4,pal5,pal6){
for(var i=0; i<ShowWords.length; i++){
return ShowWords[i]
}
}
console.log(ShowWords['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);

有人可以帮忙吗?

函数调用的语法错误。它需要function(args),而不是function[args]

这将起作用:

function ShowWords(words){
for(var i=0; i< words.length; i++){
return ShowWords[i]
}
}
console.log(ShowWords('Olá,','sabia','que', 'ta', 'tudo', 'bem?'));

但你想做的,可能是这样的:

function ShowWords(words){
for(var i=0; i< words.length; i++){
return ShowWords[i]
}
}
console.log(ShowWords(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']));

但你真的想这样做:

function ShowWords(words){
words.forEach(console.log)
}
ShowWords(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);

或者这个:

function makeListFromArray(words) {
return words.join(', ')
}
const list = makeListFromArray(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);
console.log(list);

然后,您要处理没有传入任何内容或传入字符串的情况,而不是抛出错误:

function makeListFromArray(words = []) {
return Array.isArray(words) ? words.join(', ') : words;
}
const list = makeListFromArray(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);
console.log(list);
const str = 'Olá'
console.log(makeListFromArray(str)) // prints Olá

然后你可以去 leet 并让它变成这样:

const makeListFromArray = (words = []) =>
Array.isArray(words) ? words.join(', ') : words;
const list = makeListFromArray(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);
console.log(list);

这些是实现它的几种方法。不要使用循环,数组方法更强大,并且可组合。

然后,还有打字稿...

const makeListFromArray = (words: string[] = []) => words.join(', ')
const list = makeListFromArray(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);
console.log(list);

有了(words: string[] = [])上的单一类型注释,TypeScript 现在将拒绝构建试图将字符串数组(或空数组)以外的任何内容传递给makeListFromArray的代码。

它还知道列表是一个字符串,因为它知道Array.join返回一个字符串。

由于它们都是const它知道列表的值和类型不能在代码中的任何位置更改,因此它知道list在任何地方都是字符串。

首先,使用括号而不是括号来调用函数。

如果要迭代所有参数,则应使用 spread 运算符 (...) 将所有参数收集到数组中,如下所示:

function ShowWords(...args) {
for (let i = 0; i < args.length; i++){
console.log(args[i]);
}
}

另外,var在 JavaScript 中通常被弃用,我建议您改用let关键字。

如果您只想将所有参数连接到一个字符串中,则 join 方法似乎是最简单的方法:

function ShowWords(...args){
return args.join(" ");
}
console.log(ShowWords('Olá', 'sabia','que', 'ta', 'tudo', 'bem?'));

但是,如果您只需要在控制台中显示单词,则必须将控制台函数直接放在循环中.log并且不要使用 return 来中断循环并退出函数。for ... of循环或forEach数组方法是实现此目的的好方法:

function ShowWords(...args){
args.forEach(word => console.log(word));
}
ShowWords('Olá', 'sabia','que', 'ta', 'tudo', 'bem?');
function ShowWords(...args){
for (const word of args) {
console.log(word);
}
}
ShowWords('Olá', 'sabia','que', 'ta', 'tudo', 'bem?');

您有多种解决方案可以执行此操作。其他答案只是为您提供使用数组和 for 循环的基本旧方法(这是有效的!),但我想为您提供其他解决方案:

使用一个字符串/参数并使用扩展运算符来保留所有:

const convertToStr = (...args) => {
// args is an array containing all args.
};

用法:

convertToStr("My", "First", "String");

const words = ["My", "first", "string"];
convertToStr(...words); // << Deconstruct the array to give one element / args 

请注意,这两种解决方案都会为您提供完全相同的结果。

函数内容:

如果你有一个字符串数组,并且想将它们连接在一起,你应该使用Array.join()

const convertToStr = (...args) => {
const allStrings = args.join(" "); // < Space with " ",  put "" for nothing,
console.log(allStrings);
}

由于多种原因,第二个代码不起作用。首先对函数和变量使用唯一名称。其次,如果你传递一个数组,该函数应该只接受sing参数。第三你从for语句返回,函数将在处理第一个元素后返回

var ShowWords = ['Olá,', 'sabia', 'que', 'ta', 'tudo', 'bem?']
function convertToStr(arr) {
let str = '';
for (var i = 0; i < arr.length; i++) {
str += arr[i] + ' ';
}
return str.trim();
}
console.log(convertToStr(ShowWords))

最新更新