Современный синтаксис против старого синтаксиса для циклов - PullRequest
3 голосов
/ 08 апреля 2019

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

function maxChar(str) {
  const charMap = {}
  for(let char of str){
    charMap[char] = 1
  }

  return charMap
}

console.log(maxChar('acdef'))

Возвращает объект, подобный этому:

{a:1,c:1,d:1,e:1,f:1}

Я хотел сделать то же самое, но со старым синтаксисом. Я сделал это таким образом, и это не сработало.

function maxChar(str) {
  const charMap = {}
  for(let char=0; char < str.length; char++){
    charMap[char] = 1
  }

  return charMap
}

console.log(maxChar('acdef'))

Было возвращено это:

{0:1,1:1,2:1,3:1,4:1}

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

Единственное различие между ними заключалось в том, что в первом использовалась функция современных петель

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019

Поскольку for...of со строкой, char присваивается значение str[index].Чтобы сделать то же самое со старым синтаксисом, используйте charMap[str[char]]:

function maxChar(str) {
  const charMap = {}
  for (let char = 0; char < str.length; char++) {
    charMap[str[char]] = 1;
  }
  return charMap;
}

console.log(maxChar('acdef'));

Вы также можете упростить функцию:

function maxChar(str) {
  const charMap = {};
  str.split("").forEach(function(char) {
    charMap[char] = 1;
  });
  return charMap;
}

console.log(maxChar('acdef'))
1 голос
/ 08 апреля 2019

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

С помощью этого счетчика вы можете получить доступ к своему персонажу с помощью str[i]:

function maxChar(str) {
  const charMap = {}
  for (let i = 0; i < str.length; i++){
    charMap[str[i]] = 1
  }
  return charMap
}

console.log(maxChar('acdef'))

Вы также можете использовать Array.prototype.reduce () , чтобы сделать это:

const maxChar = str => [...str].reduce((map, x) => ({ ...map, [x]: 1 }), {})

console.log(maxChar('acdef'))
1 голос
/ 08 апреля 2019

Вы должны установить ключ как str[char]

  • str[char] - это символ str в индексе char
  • char - это переменная, котораяэто номер.

function maxChar(str) {
  const charMap = {}
  for(let char=0; char < str.length; char++){
    charMap[str[char]] = 1
  }

  return charMap
}

console.log(maxChar('acdef'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...