首页 > 解决方案 > 编写js程序创建map_armstrong函数

问题描述

创建一个带有两个参数pre_maparr的函数。其中pre_map将是通过我们的测试用例提供给您的内置地图,而arr将是一个数字数组。对于给定数组中的每个元素,您的函数应检查该元素是否作为其键之一存在于给定的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));
}

我的代码有什么问题,为什么它没有通过一些测试用例。

标签: javascript

解决方案


[编辑:由于从要求中不清楚是否应该直接修改原始地图,我正在添加第二个解决方案]

方案一(直接修改原图):

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);
}


推荐阅读