Создать определенную строку в массиве (javascript)

Halo, прежде всего, прошу прощения, если это простой вопрос, но сейчас я застрял, чтобы понять, какая у меня ошибка. (Я только изучаю JavaScript, кстати). Итак, у меня есть функция, которая будет создавать массив строк, если длина массива нечетная, самая середина массива будет содержать звездочку, а остальное будет просто пустой строкой. Но если длина массива четная, индекс mid и before mid будет содержать звездочку (*). Тестовый пример будет таким:

console.info (Exercise(5) // ['','','*','','']    
console.info (Exercise(4) // ['','*','*','']
console.info( Exercise1(0)) // invalid input 

Я понял, что сначала вам нужно создать массив, содержащий строку, а затем разделить длину массива на 2, чтобы мы могли знать, является ли массив четным или нечетным. Если нечетное, я помещаю звездочку в индексный массив [mid], а если четное, я помещаю звездочку в индексный массив [mid-1] и [mid]. Вот что у меня получилось:

function Exercise1(num){
var result = [] ;
var midArr = num.length/2 
var oddArr = Math.floor (midArr)
for (var i = 0; i<num.length; i++){
   if (num.length % 2 !== 0) {
      result = push.result(num[oddArr]('*'))
      return result
    } else if (num.length % 2 === 0 ){
      result = push.result(num[midArr-1][mid]('*'));
      return result
    } else {
      return invalid  ;
    }
  }
}

Я не знаю, что делаю не так. Это моя логика, или мой синтаксис неверен, или я просто глуп.

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

ASDFGerte 10.06.2018 02:39

я не понимаю :(

nomad 10.06.2018 02:42

@nomad использует var midArr = num/2 вместо var midArr = num.length/2, поскольку num - это число, а не массив

maljukan 10.06.2018 02:45

вы можете посоветовать, что мне нужно исправить в моем коде?

nomad 10.06.2018 02:49

@maljukan ох, понятно, чтобы мы могли узнать, четное или нечетное, верно?

nomad 10.06.2018 02:51
Поведение ключевого слова "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) для оценки ваших знаний,...
1
5
33
2

Ответы 2

Более простой способ - создать массив пустых строк, равный половине длины массива, а затем использовать распространение:

function Exercise(length) {
  if (!Number.isInteger(length) || length < 1) return null;
  const blanks = Array(Math.floor((length - 1) / 2)).fill('');
  return length % 2 === 0
    ? [...blanks, '*', '*', ...blanks]
    : [...blanks, '*', ...blanks];
}

console.info(Exercise(5));
console.info(Exercise(4));
console.info(Exercise(0));

ооо, поэтому вы назначаете пустую строку переменной / const. Я не думал об этом

nomad 10.06.2018 02:47

но я не совсем понял синтаксис: if (! Number.isInteger (length) || length <1) return null; const blanks = Массив (Math.floor ((длина - 1) / 2)). fill (''); длина возврата% 2 === 0 не могли бы вы уточнить?

nomad 10.06.2018 02:47

Первая строка возвращает ноль, если ввод не в желаемом формате. Вторая строка создает массив пустых строк на половину длины или на половину длины минус один (в зависимости от того, что дает целое число. Затем просто распределите его по возвращаемому массиву.

CertainPerformance 10.06.2018 02:51

а что с вопросительным знаком перед массивом? это требование распространять массив?

nomad 10.06.2018 02:59

Это тернарный оператор. Условие истинно, верните первое выражение, иначе верните второе выражение.

CertainPerformance 10.06.2018 03:01

это первый раз, когда я слышу тернарную операцию ... Большое вам спасибо, ребята, ответ очень полезен

nomad 10.06.2018 03:07

Вы можете использовать два цикла for в сочетании с индексами +/-, чтобы упростить себе жизнь.

Хотя стоит упомянуть, что если ваше число 1 или 2, результат будет [*] или [*, *] соответственно. Не был уверен, как ты хотел с этим справиться.

var Exercise1 = (num) => {
  let arr = [];
  if (num % 2) {
    for(i=0;i<num;i++){arr.push((i==~~(num/2))?'*':'');}
  } else {
    for(i=0;i<num;i++){arr.push((i==(num/2)-1 || i==(num/2))?'*':'');}
  }
  return arr;
}

console.info('Even (4): ['+Exercise1(4)+']');
console.info('Odd (5): ['+Exercise1(5)+']');

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