JavaScript — замена цикла старым синтаксисом

#javascript

#javascript

Вопрос:

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

 function maxChar() {  
      const charMap = {a:1, b:3, a:1}
      let max = 0
      let maxChar = ''

      for(let index in charMap) {
        if(max < charMap[index]){
          max = charMap[index]
          maxChar = index
        } 
      }

      return maxChar
    }

    console.log(maxChar())
  

Он возвращается на консоль b , которая является буквой, которая повторяется чаще всего.

Но я хотел сделать то же самое со старым синтаксисом.

Как бы мне заменить это?

 for(let index in charMap) {//....
  

и остальной код

Комментарии:

1. Замените все const и let на var .

2. какой старый синтаксис вы хотите использовать …? for(var i = 0; i < Object.keys(charMap).length; i )

3. Это может быть что-то более старое, чем этот пример, в котором не используется ‘let index in ..’.

4. @trincot Я сохраню его. я хочу изменить только основные части, которые являются циклом, и то, что находится внутри него.

5. кстати, формулировка предполагает, что вы берете индекс. это может быть правильно для массивов, но для объектов вы получаете ключ или имя свойства.

Ответ №1:

Если вы хотите использовать tradition for loop для перебора объектов.
Сначала вам нужно получить все ключи с Object.keys(charMap) помощью, а затем перебрать ключи.

 function maxChar() {  
    const charMap = {a:1, b:3, a:1}
    let max = 0
    let maxChar = ''
    const charMapKeys = Object.keys(charMap)

    for(let i = 0; i < charMapKeys.length; i  ) {
        if(max < charMap[charMapKeys[i]]){
            max = charMap[charMapKeys[i]]
            maxChar = charMapKeys[i]
        } 
    }

    return maxChar
}

console.log(maxChar())  

PS: Но желательно, чтобы вы использовали for ... in цикл для перебора объектов, так как он намного чище и поддерживается с самого начала.

Ответ №2:

Синтаксис for .. in цикла существует с первой версии ECMAScript. Единственное, что нужно адаптировать, это те let и const : измените их var .

 function maxChar() {  
  var charMap = {a:1, b:3, a:1};
  var max = 0;
  var maxChar = '';
  for (var index in charMap) {
    if (max < charMap[index]) {
      max = charMap[index];
      maxChar = index;
    } 
  }
  return maxChar
}

console.log(maxChar());  

Ответ №3:

Вы можете использовать ключ без другой переменной для максимального значения.

Чтобы иметь код, совместимый с ES5, измените все объявления переменных на var операторы.

 function maxChar() {
    var charMap = { a: 1, b: 3, a: 1 },
        maxKey,
        key;

    for (key in charMap) {
        if (!maxKey || charMap[maxKey] < charMap[key]) {
            maxKey = key;
        }
    }
    return key;
}

console.log(maxChar());