Создайте функцию, которая принимает несколько строковых аргументов и печатает их все вместе - PullRequest
0 голосов
/ 22 февраля 2020

Я очень новичок в 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?']);

Кто-нибудь может помочь?

Ответы [ 4 ]

3 голосов
/ 22 февраля 2020

У вас неправильный синтаксис для вызова вашей функции. Это должно быть 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á

И тогда вы можете go leet и сделать это так:

const makeListFromArray = (words = []) =>
   Array.isArray(words) ? words.join(', ') : words;

const list = makeListFromArray(['Olá,','sabia','que', 'ta', 'tudo', 'bem?']);

console.log(list);

Это несколько способов сделать sh это. Не используйте циклы, методы массива более мощные и составные.

А потом был TypeScript ...

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 - это строка везде.

1 голос
/ 22 февраля 2020

Прежде всего, используйте скобки вместо скобок для вызова вашей функции.

Если вы хотите перебрать все ваши аргументы, вы должны использовать оператор распространения (...), чтобы собрать их все в массив, как это:

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?'));

Но если все, что вам нужно, это отображать слова в консоли, вы должны включить функцию console.log непосредственно внутри вашего l oop и не используйте return, который нарушает l oop и выходит из функции. for ... of loop или 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?');
1 голос
/ 22 февраля 2020

У вас есть несколько решений для этого. Другие ответы просто дают вам базовый c старый способ сделать это с массивом и a для l oop (и это действительно так!), Но я хочу дать вам другие решения:

Использование одной строки / аргументов и использование оператора распространения для сохранения всех:

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);
}
0 голосов
/ 22 февраля 2020

Второй код не работает по нескольким причинам. Сначала используйте уникальное имя для функции и переменной. Во-вторых, если вы передаете массив, ожидается, что функция будет принимать только аргумент 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...