#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])])