NodeJS: как разделить большие строки на массив чисел, а затем добавить все строки с четным индексом

Массив, из которого я получаю свои исходные строки, выглядит примерно так:

arr[0]:
  11-3
  12-6
arr[1]:
  5-9
  7-2
  18-2
arr[2]:
  2-7

(Это просто пример, общая идея состоит в том, что в arr может быть любое количество объектов, и строка в каждом из них содержит любое количество комбинаций # - #)

Я пытаюсь сложить все числа слева вместе (если использовать приведенный выше пример, он добавит что-то вроде 11, 12, 5, 7, 18 и 2 вместе) и сохраню это число в переменной.

Как мне это сделать?

Изменить 1: попытка кода:

var winsLossNums = winLoss[0].match(/\d+/g).map(Number)

for (var i = 0; i < winLoss[0].match(/\d+/g).map(Number).length; i++) {
  if (i % 2 === 0) {
    totalNums.push(winLoss[0].match(/\d+/g).map(Number)[i]);
  }
}
}   

Этот код находится в цикле, и в каждом цикле есть новый объект arr, как в приведенном выше примере.

Я отредактировал код, извините

ElkTF2 01.08.2018 06:18

Я не могу точно сказать, что происходит с вашим массивом. Это многострочные строки с тире? Можете ли вы включить кавычки и сделать его действительным JS или JSON?

ggorlen 01.08.2018 06:22
Поведение ключевого слова "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) для оценки ваших знаний,...
2
2
40
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Предполагая, что ваши значения массива представляют собой строки с новой строкой между ними, вы можете уменьшить массив, разделить каждое значение на \n и снова уменьшить, взяв первое значение разделения на '-':

let arr = ['11-3\n12-6', '5-9\n7-2\n18-2',  '2-7']

let tot = arr.reduce((a, c) => {
    let pairs = c.split('\n')
    return a + pairs.reduce((a, c)=> a + Number(c.split('-')[0]), 0)
}, 0)

console.info(tot)
console.info(11 + 12 + 5 + 7+ 18 + 2)

Вам может потребоваться очистить данные или разделить их на пробелы, если это не чистый \n на строку. Но это должно быть хорошим началом.

Вы можете попробовать это:

let arr = [
      [
        '11-3',
        '12-6'
      ], [
        '5-9',
        '7-2',
        '18-2'
      ], [
        '2-7'
      ]
    ];

    let sum = 0;
    for (let index=0; index<arr.length; index++) {
        let arrayMasterElement = arr[index];
        // console.info(arrayMasterElement);
        for (let index2=0; index2<arrayMasterElement.length; index2++) {
          let arrayElement = arrayMasterElement[index2];
          let elementArray = arrayElement.split('-');
          let intVal = parseInt(elementArray[0]);
          console.info('Int value: ' + intVal);
          sum += intVal;
        }
        if (index == arr.length - 1) {
            console.info('Sum: ' + sum);
        }
    }

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