У меня есть этот код, который успешно работает.
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.info(maxChar())
Он возвращается на консоль b
, которая повторяется чаще всего.
Но я хотел сделать то же самое со старым синтаксисом.
Как бы я заменил это?
for(let index in charMap) {//....
и остальной код
какой старый синтаксис вы хотите использовать...? for(var i = 0; i < Object.keys(charMap).length; i++)
Это может быть что-то более старое, чем этот пример, в котором не используется 'вставить индекс...'.
@trincot Я сохраню это. я хочу изменить только основные части, то есть петлю и то, что внутри нее.
Кстати, формулировка предполагает, что вы берете index. это может быть правильно для массивов, но для объектов вы получаете ключ или имя свойства.
Цикл, который у вас есть в вашем коде, настолько стар, насколько это возможно. Это было в первой редакции EcmaScript (1997). Единственное, что не будет работать в этой версии JS, это let
и const
.
да @ashish, не могли бы вы сделать полный код в ответе. Если вы это сделаете, я проголосую за это.
Object.keys(charMap)
не так стар, как цикл, который у вас уже есть... Он был введен в ES5, а цикл for in
был в ES1... Я не понимаю этот вопрос :/
Синтаксис цикла 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.info(maxChar());
Вы можете взять ключ без другой переменной для максимального значения.
Чтобы получить код, совместимый с 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.info(maxChar());
Если вы хотите использовать 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.info(maxChar())
PS: But it is advisable you use
for ... in
loop to iterate over objects, as it is much cleaner and is supported since very beginning.
Замените все
const
иlet
наvar
.