Как напечатать только первый и второй элементы массива?

#javascript #arrays

Вопрос:

У меня есть массив под названием tagline, который выглядит следующим образом:

 [" Leger Poll", " Web survey of 2", "test", "test", "test", "test"]
 

он извлекается из внешнего CSS-файла. Я присвоил ему имя переменной tagline .

Я хочу напечатать первый и второй элементы с помощью document.getElementById , чтобы я мог стилизовать текст. Я не уверен, почему это не работает? Я попытался вывести переменную за пределы основной функции, чтобы она была глобальной, но все равно не работала. Я начинающий программист. Вот что у меня есть. Пожалуйста, помогите.

     var tagline = [];


    async function getData() {
      // const response = await fetch('testdata.csv');
      var response = await fetch('data/test3.csv');
      var data = await response.text();
      data = data.replace(/"/g, "");
      var years = [];
      var vals = [];

      var rows = data.split('n').slice(1);

      rows = rows.slice(0, rows.length - 1);
      rows = rows.filter(row => row.length !== 0)

      rows.forEach(row => {
        var cols = row.split(",");
        years.push(cols[0]);
        vals.push(0   parseFloat(cols[1]));
        tagline.push(cols[2]);
      });

      console.log(years, vals, tagline);
      return { years, vals, tagline };


    }
    var res = tagline.slice(1);
    document.getElementById("demo1").innerHTML = res;
    var res2 = tagline.slice(2);
    document.getElementById("demo2").innerHTML = res2;


  </script> ```
 

Комментарии:

1. Можете ли вы показать нам результаты testdata.csv и ожидаемые значения для demo1 и demo2?

2. Ты никогда не звонишь getData ? Но даже если бы вы это сделали: вы не можете ожидать, что будущий результат будет доступен сейчас.

3. Вы никогда не вызываете функцию getData() . Даже если вы это сделали, это асинхронный запрос. Остальная часть вашего кода JS синхронна, поэтому он будет выполнен до завершения запроса, и массив будет содержать какие-либо данные. Вам следует рассмотреть возможность использования a Promise .

Ответ №1:

Похоже, вы определили функцию getData() , но не вызывали ее для выполнения.

Поскольку вы используете асинхронную функцию, я использую then() .

 var tagline = [];

async function getData() { ...// your function }

getData().then(() => {

    const res = tagline[0];
    document.getElementById("demo1").innerHTML = res;

    const res2 = tagline[1];
    document.getElementById("demo2").innerHTML = res2;

});

 

Комментарии:

1. tagline.slice возвращает массив!

2. Массив возвращает это в моем консольном Тринко [» Опрос Легера», «Веб-опрос 2», «тест», «тест», «тест», «тест»]

3. Я чувствую себя сбитым с толку. Извините, я всего лишь новичок. Я просто хочу отобразить на своей веб-странице первые два элемента массива (в col3), которые поступают из данных csv. У меня есть массив, поступающий правильно, но я не могу вывести его на печать на консоль.

4. Бигпигги. Вы хотите сказать, что я должен создать другую функцию внутри асинхронной функции для печати? Вот так? getData().затем(() => { const res = слоган[0]; document.getElementById(«demo1»).innerHTML = res; const res2 = слоган[1]; document.getElementById(«demo2»).innerHTML = res2; }

5. Это сработало. СПАСИБО ТЕБЕ, Бэдпигги!!! Ты-бомба!!! 💕

Ответ №2:

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

 array[index];
 

В вашем случае:

 tagline[0]; //first element
tagline[1]; //second element
 

Так getData как это async вы должны await для того, чтобы он заполнил tagline :

 await getData(); //call it before you use the tagline array
 

Если вы используете более старую версию JS, которая не поддерживает async/await , вам нужно дождаться ответа с обещанием .then .

Кроме того, имейте в виду:

Метод slice() возвращает неглубокую копию части массива в новый объект массива, выбранный от начала до конца (конец не включен), где начало и конец представляют индекс элементов в этом массиве.

Комментарии:

1. Пожалуйста, прочитайте весь вопрос полностью, прежде чем давать ответ.

2. @BadPiggie Какую часть я пропустил??!

3. Вы пропустили, что их массив пуст… И если бы это действительно был ответ, то, безусловно, это дублирующий вопрос, и вы должны проголосовать за закрытие. Посмотрите на комментарии под вопросом.

4. @BadPiggie Обновлено!

5. Нет. за исключением модулей ECMA, вы должны использовать await внутри async функции. Так что лучше, если вы обернете его async функцией или используете then