Создайте 3 разных массива из одного массива в JavaScript

Я хочу создать 3 отдельных массива из одного массива из 7 элементов. То, что я делаю со следующим кодом, работает неправильно. И мне нужна твоя помощь, пожалуйста. Спасибо.

//declara global variables
var i,j; var array_2; var gn; var gl; var gs; var gnArr=[]; var glArr=[]; var gsArr=[]; var array = []; var txtdata;

//get array values from a textarea     
txtdata = document.getElementById("txtdata").value;

это значения из ввода TextArea:

txtdata = Distinction:A+:>=75 Alpha:A1:>=75 V.Good:A2:>=75 Good:A3:>=75 Credit:C4:>=75 Pass:P7:>=75 Fail:F9: >=75

// split txtdata using the empty space paramater
array = txtdata.split(" ");  
alert(array.length-1); // length of array[] is 7;

//split each array item of the array[] into 3 different arrays... [0,1,2] using the ":" parameter
for ( i = 0; i < array.length-1; i++ ){ 
    array_2 = array[i].split(":"); //there are 3 array items... 0, 1, 2 in array_2
    gnArr = array_2[0]+":";  glArr = array_2[1]+":";  gsArr = array_2[2]+":";           
} 
alert(gnArr); // this only alerts the last (7th) item of the array[i].

Но я хочу получить все array_2[0] для всех 7 элементов массива[i] в ​​gnArr... вот так...

Различие:Альфа:V.Хорошо:Хорошо:Кредит:Прошел:Не прошел

То же самое касается array_2[1] и array_2[2]

А+:А1:А2:А3:С4:Р7:Ф9

Вы должны добавить результат в gnArr и другие, используя developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Simon 18.12.2020 14:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

таким образом: используйте += см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Addition_assignment

//declara global variables
var i, j , array_2 
  , gnArr = []
  , glArr = []
  , gsArr = []
  , array = []
  , txtdata = "Distinction:A+:>=75 Alpha:A1:>=75 V.Good:A2:>=75 Good:A3:>=75 Credit:C4:>=75 Pass:P7:>=75 Fail:F9:>=75"
  ;

//get array values from a textarea     
// txtdata = document.getElementById("txtdata").value;

array = txtdata.split(" ");  // split txtdata using the empty space paramater
 
 
for ( i = 0; i < array.length; i++ )
  { 
  array_2 = array[i].split(":"); //there are 3 array items... 0, 1, 2 in array_2
  let separator = (i != (array.length -1)) ? ':': ''
  gnArr += array_2[0] + separator
  glArr += array_2[1] + separator
  gsArr += array_2[2] + separator           
  }
  
console.info ('gnArr =', gnArr )
console.info ('glArr =', glArr )
console.info ('gsArr =', gsArr )

для информации, короче:

let txtdata = "Distinction:A+:>=75 Alpha:A1:>=75 V.Good:A2:>=75 Good:A3:>=75 Credit:C4:>=75 Pass:P7:>=75 Fail:F9:>=75";
let [gnArr, glArr, gsArr] =
      txtdata
      .split(' ')
      .reduceRight((res,part,i)=>
        {
        part.split(':').forEach((subPart,j)=>res[j].unshift(subPart))
        if (!i) res.forEach((gX,j,r)=>r[j]=gX.join(':'))
        return res
        }
        ,[ [],[],[] ]);                           
            
console.info ('gnArr =', gnArr )
console.info ('glArr =', glArr )
console.info ('gsArr =', gsArr )
.as-console-wrapper { max-height: 100% !important; top: 0; }

Большое спасибо. Это сработало отлично. Пожалуйста, не могли бы вы немного объяснить мне, если не возражаете? Спасибо. Ты замечательный!

Cybernetiquettes 18.12.2020 23:16

@Cybernetiquettes Если вы действительно новичок, то в последнем коде много «вещей». он начинается с назначения деструктурирования, затем идет цепочка методов, немного кода nija (для !i => eq i===0) ... метод reduceRight встречается нечасто ... короче, было бы слишком много объяснять здесь, Документация MDN должна вам помочь, иначе по каждой из этих тем на этом сайте, вероятно, уже есть все ответы.

Mister Jojo 18.12.2020 23:57

Другие вопросы по теме