我对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))