Как преобразовать в верхний регистр массив с простым ECMAscript5, просто используя цикл while? - PullRequest
0 голосов
/ 24 мая 2018

Мне нужно выполнить это простое упражнение, но я действительно много борюсь с ним.Я должен преобразовать все имена в верхний регистр и передать его в пустой массив, используя только , тогда как loop (s), и я не могу использовать какой-либо метод, просто обычный javascript 5:

var names = ['rob', 'dwayne', 'james', 'larry', 'steve'];

var UpperCase = [];

Я пробовал с таким объектом (все еще есть ошибки, это просто идея):

var change = {
  "mary":"MARY",
  "john":"JOHN",
  "james":"JAMES",
  "anna":"ANNA",
  "jack":"JACK",
  "jeremy":"JEREMY",
  "susanne":"SUSANNE",
  "caroline":"CAROLINE",
  "heidi":"HEIDI"
}
for(var key in change) {
  var obj = change[key];

  for (var prop in obj) {
  var value = obj[prop];
}
}

while(names[i]===change.key) {
  for(var i=0; i<names.length; i++) {
  UpperCase = change.value[i];
} }

Я надеюсь, что кто-нибудь может помочь мне с этим.

Спасибо!

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Вместо использования toUppercase ():

Проверьте, является ли символ прописным или строчным с этим

str[i].charCodeAt(0) > 96

charCodeAt

fromCharCode

Использование только в то время как

var i = 0;
while (i < str.length) ...

Не использовать функцию push для массива

 UPPERCASE[UPPERCASE.length] = uppercase(names[i]);

Надеюсь, эта функция поможет вам

function uppercase(str) {
  var i = 0;
  var output = "";
  while (i < str.length) {
    var x =
      (str[i].charCodeAt(0) > 96)
        ? String.fromCharCode(str[i].charCodeAt(0) - 32)
        : String.fromCharCode(str[i].charCodeAt(0));
    output += x;
    i++;
  }
  return output;
}

Пример:

function uppercase(str) {
  var i = 0;
  var output = "";
  while (i < str.length) {
    var x =
      (str[i].charCodeAt(0) > 96) ?
      String.fromCharCode(str[i].charCodeAt(0) - 32) :
      String.fromCharCode(str[i].charCodeAt(0));
    output += x;
    i++;
  }
  return output;
}
var UPPERCASE = [];
var names = ["rOb", "dwayne", "james", "larry", "steve"];

var i = 0;

while (i < names.length) {
  UPPERCASE[UPPERCASE.length] = uppercase(names[i]);
  i++;
}

console.log(UPPERCASE);

Обновление

Ответ без функции и линейного условия

var UPPERCASE = [];
var names = ["rOb", "dwayne", "james", "larry", "steve"];

var i = 0;

while (i < names.length) {
  var j = 0,
    output = "",
    str = names[i];
  while (j < str.length) {
    var x;
    if (str[j].charCodeAt(0) > 96) {
      x = String.fromCharCode(str[j].charCodeAt(0) - 32);
    } else {
      x = String.fromCharCode(str[j].charCodeAt(0));
    }
    output += x;
    j++;
  }
  UPPERCASE[UPPERCASE.length] = output;
  i++;
}

console.log(UPPERCASE);
0 голосов
/ 24 мая 2018

Вы должны использовать функцию обработчика на карте:

var names = ['rob', 'dwayne', 'james', 'larry', 'steve'];
var UpperCase = names.map(function(x){ return x.toUpperCase() });
0 голосов
/ 24 мая 2018

Немного улучшен ответ @ andrewgi:

var names = ['rob', 'dwayne', 'james', 'larry', 'steve']
var i = 0
var result = []

while (i < names.length) {
  result.push(names[i].toUpperCase())
  i++ 
}

console.log(result)

Я удалил +1 после проверки names.length и записал toUpperCase с правильным верблюжьим чехлом.

0 голосов
/ 24 мая 2018

Вам нужно создать приращение (i), чтобы ваш цикл while знал, когда остановиться.Это лучший вариант для цикла for, но цикл while также работает.

var names = ['rob', 'dwayne', 'james', 'larry', 'steve']
var i = 0
var result = []

while (i < names.length) {
  result.push(names[i].toUpperCase())
  i++ 
}

console.log(result)
...