为什么即使我已将数字转换回字符串,也不能将数字推入我的字符串数组中?

时间:2021-05-19 20:49:01

标签: javascript arrays algorithm

您好,我正在尝试编写代码战卡塔:https://www.codewars.com/kata/54a91a4883a7de5d7800009c/train/javascript

我知道我所做的事情很冗长,但我想在重构之前一步一步地做。

  1. 我已经拆分了用户输入的字符串
  2. 通过数组过滤只是为了得到数字并将其转换为数字
  3. 将该数字增加 1
  4. 将数字改回字符串
  5. 现在我想将我的字符串编号添加到原始数组中,但它不起作用,我不明白为什么 :S

我知道这不是kata的最终答案,但我只是在尝试,想知道为什么这不起作用......

function isNumeric(num){
 return !isNaN(num)
}

function incrementString (string) {
  const splitString = string.split("");

  let numbers = Number(splitString.filter(el => isNumeric(el)).join("")); //[
  'f', 'o', 'o', 'b',
  'a', 'r', '0', '0',
  '4', '2'
]

  let incrementNumber = numbers +=1; // 43

  let revertNumberToString = incrementNumber.toString(); // "43"

  let test = splitString.push(revertNumberToString); // why can I not push the number 43 onto my original array?

  console.log(test); // 11? why?

}

incrementString("foobar0042")

2 个答案:

答案 0 :(得分:2)

它似乎工作正常。如果您在推送后再次检查 splitString,那么它将包含所有 11 个项目。这就是数字 11 的来源。当您保存对变量的推送时,它不会创建一个新数组,而是保存新数组的长度。

  console.log(splitString)
  // ["f", "o", "o", "b", "a", "r", "0", "0", "4", "2"]
  let test = splitString.push(revertNumberToString);
  console.log(splitString)
  // ["f", "o", "o", "b", "a", "r", "0", "0", "4", "2", 43]
  console.log(test); // 11? why?

答案 1 :(得分:2)

Javascript push 方法将元素添加到数组并返回长度,这就是为什么你得到 11 而不是数组本身。 Reference