javascript - 编写js程序创建map_armstrong函数
问题描述
创建一个带有两个参数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
基于该键是否是一个armstrong number
。(还记得您之前回购中的 Armstrong Numbers 吗?)- 例如:
- 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));
}
我的代码有什么问题,为什么它没有通过一些测试用例。
解决方案
[编辑:由于从要求中不清楚是否应该直接修改原始地图,我正在添加第二个解决方案]
方案一(直接修改原图):
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);
}
方案二(原图未修改):
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);
}
推荐阅读
- python - 无法从图像中提取文本
- ssl - 升级后的 Jetty SSL 问题 - 未知协议
- python - 从 python 中的 cvs 中删除 99999 个值?
- user-interface - Fyne 导入问题
- python - 有没有办法在 sci-kit 学习交叉验证中定义我想要的每个标签的分数?
- java - 在 Java 中使用的圣诞树
- python - 删除字段 ogr 图层后尝试迭代功能时出现段错误
- python - 改变 Pandas 数据结构中元素的值
- html - 如何在网格系统中添加自定义边距并保持响应?
- spring-boot - 使用 Spring Scheduler 为 Cron 调度实现 Quartz