#javascript
#javascript
Вопрос:
Создайте функцию с двумя параметрами pre_map и arr. Где pre_map будет встроенной картой, предоставленной вам в наших тестовых примерах, а arr будет массивом чисел. Для каждого элемента из заданного массива ваша функция должна проверять, существует ли этот элемент в вашем заданном pre_map в качестве одного из его ключей или нет.
- например:
- pre_map { 0 => true, 1 => true, 10 => false, 19 => false, 370 => true }
- arr [10, 407]
- Если она существует, то
delete
она из pre_map- например:
- pre_map { 0 => true, 1 => true, 19 => false, 370 => true }
- например:
- в противном случае,
add a new key
в этом заданном pre_map, где его значением будет логическое значение как илиtrue
илиfalse
в зависимости от того, является ли этот ключ anarmstrong number
или нет. (Помните номера Armstrong из вашего предыдущего репозитория?)- например:
- pre_map { 0 => true, 1 => true, 19 => false, 370 => true, 407 => true}
- например:
- Затем верните обновленную карту (pre_map)
function task09(pre_map, arr) {
let obj = Object.fromEntries(pre_map);
function isArmstrong(number) {
if (number < 0) {
return false;
}
let num_to_str = number.toString();
let sum = 0;
for (let i = 0; i < num_to_str.length; i ) {
let num = parseInt(num_to_str[i]);
sum = Math.pow(num, num_to_str.length);
}
return (number == sum);
}
for (let i = 0; i < arr.length; i ) {
let entry = arr[i].toString();
if (obj.entry !== undefined) {
delete obj.entry;
} else {
obj.entry = isArmstrong(parseInt(entry));
}
}
return new Map(Object.entries(obj));
}
Что не так с моим кодом и почему он не проходит некоторые тестовые примеры.
Комментарии:
1. Я думаю, что проблема в вашей
isArmstrong()
функции. Число Армстронга — это » число, равное сумме кубов его цифр «, поэтому вы должны заменитьsum = Math.pow(num, num_to_str.length);
наsum = Math.pow(num, 3);
2. спасибо, я внес изменения, но они все еще не проходят тестовые примеры.
Ответ №1:
[РЕДАКТИРОВАТЬ: поскольку из требований неясно, следует ли изменять исходную карту напрямую или нет, я добавляю второе решение]
Решение 1 (исходная карта изменяется напрямую):
function task09(pre_map, arr) {
function isArmstrong(num) {
if (num < 0) return false;
const numToStr = num.toString();
let sum = 0;
for (let i = 0; i < numToStr.length; i ) {
sum = Math.pow(parseInt(numToStr[i]), 3);
}
return num === sum;
}
arr.forEach(item => {
if (pre_map.has(item)) {
pre_map.delete(item);
} else {
pre_map.set(item, isArmstrong(item));
}
});
return pre_map;
}
/********
* test *
********/
const myMap = new Map();
myMap.set(0, true);
myMap.set(1, true);
myMap.set(10, false);
myMap.set(19, false);
myMap.set(370, true);
const myArr = [10, 407];
console.log('myArr:', myArr);
console.log('myMap (before):');
for (let item of myMap) {
console.log(item);
}
task09(myMap, myArr);
console.log('myMap (after):');
for (let item of myMap) {
console.log(item);
}
Решение 2 (исходная карта НЕ изменяется):
function task09(pre_map, arr) {
const post_map = new Map(pre_map);
function isArmstrong(num) {
if (num < 0) return false;
const numToStr = num.toString();
let sum = 0;
for (let i = 0; i < numToStr.length; i ) {
sum = Math.pow(parseInt(numToStr[i]), 3);
}
return num === sum;
}
arr.forEach(item => {
if (post_map.has(item)) {
post_map.delete(item);
} else {
post_map.set(item, isArmstrong(item));
}
});
return post_map;
}
/********
* test *
********/
const myMap = new Map();
myMap.set(0, true);
myMap.set(1, true);
myMap.set(10, false);
myMap.set(19, false);
myMap.set(370, true);
const myArr = [10, 407];
const myUpdatedMap = task09(myMap, myArr);
console.log('myArr:', myArr);
console.log('myMap:');
for (let item of myMap) {
console.log(item);
}
console.log('myUpdatedMap:');
for (let item of myUpdatedMap) {
console.log(item);
}