Добавление новых ключей и изменение значений в цикле for/if

#javascript #dictionary #append

Вопрос:

Моя текущая цель состоит в том, чтобы взять элементы в целых числах массива и создать значение пары ключей на основе того, сколько раз ключ появлялся в целых числах. Моя логика такова: для i в целых числах, если я уже в целых числах 2, увеличьте значение этого ключа на 1. если он не существует, создайте ключ и соедините его со значением 1. Прошло уже несколько часов, и после интенсивного поиска в гугле я, кажется, не могу найти, где я путаю свою логику.

 //require realdine-sync module
var readlineSync = require('readline-sync');
//initialize variable and list
var integer;
integers2 = {};
var integers = [];
//user input
integer = readlineSync.question('Integer?: ')
//check user input and append any integer besides 0
while (integer != 0 amp;amp; integer >= 1 amp;amp; integer <= 100){
console.log("not 0!")
integers.push(integer)
integer = readlineSync.question('Integer?: ')
}
console.log(integers);
for(i in integers){if (i in integers2){integers2[i]  = 1}else{integers2[i] = 1}
   
}
console.log(integers2)
 

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

1. Просто мне повезло, что после публикации этого вопроса я, наконец, наткнулся на что-то, что меня подтолкнуло. « если (ключ в объекте) { объект[ключ] ; } еще { объект[ключ] = 1; } «

Ответ №1:

 let integers2 = {}

integers = [5, 4, 5, 2, 4, 7, 5];

// you were using 'in' instead 'of', 'in': gives you index , 'of'?: gives you value of array
for (let i of integers) {
    if (integers2[i]) { // if key exist increment value by one
        integers2[i]  = 1
    } else { // else add 1 as the first value
        integers2[i] = 1
    }
}
console.log(integers2); 

Ответ №2:

Это решение, которое вы можете попробовать и которое работает. Он использует ту же логику, что и вы описали в вопросе. Это решение использует Array.prototype.reduce() с a Map() .

 const howMany = arr => arr
  .reduce(
    (map, n) => map.set(n, (map.get(n) ?? 0)   1), 
    new Map()
  )

console.log([...howMany([3, 4, 6, 4, 5, 5, 5])])