簡體   English   中英

為什么即使我已將數字轉換回字符串,我也不能將數字推送到我的字符串數組中?

[英]Why can I not push a number into my array of strings even though I have converted the number back to a string?

您好,我正在嘗試進行代碼大戰 kata: https://www.codewars.com/kata/54a91a4883a7de5d7800009c/train/javascript

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

  1. 我已經拆分了用戶輸入的字符串
  2. 通過數組過濾只是為了獲取數字並將其轉換為 NUMBER
  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")

它似乎工作正常。 如果您在 push 后再次檢查 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?

Javascript push 方法將元素添加到數組並返回長度,這就是為什么你得到 11 而不是數組本身。 參考

您可以采用不同的方法,將值拆分為字符串和數字部分,並獲取數字部分的長度,以便稍后用前導零填充值。

 function incrementString(value) { const string = (value.match(/\D+/) || [''])[0], number = (value.match(/\d+/) || ['0'])[0]; return string + (+number + 1).toString().padStart(number.length, 0); } function assertEquals(a, b) { console.log(a === b, a, b); } assertEquals(incrementString("foobar000"), "foobar001"); assertEquals(incrementString("foo"), "foo1"); assertEquals(incrementString("foobar001"), "foobar002"); assertEquals(incrementString("foobar99"), "foobar100"); assertEquals(incrementString("foobar099"), "foobar100"); assertEquals(incrementString(""), "1");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM