【问题标题】:Check if character in string is an integer, and if so grab that int检查字符串中的字符是否为整数,如果是则获取该整数
【发布时间】:2021-08-11 04:30:05
【问题描述】:

我目前在 codewars 网站上尝试改进我的 JavaScript 以及其他方面。这个问题会给出这样的输入 'is2 Thi1s T4est 3a' 并期待像这样的输出 'Thi1s is2 3a T4est'

我在索引字符串时遇到问题。这似乎很奇怪,因为我以前在 Python 中做过,但即使在 Python 中尝试,我也没有得到正确的输出。

这是我的代码,之前它至少给了我一个数字数组,但现在我只得到[ Array(4) ]

我知道正确的输出应该是一个字符串,但是一旦我把它全部放在一个数组中,我打算只 tempSentence.join(" ") 数组并返回它。抱歉,这有点乱,但我一直在尝试不同的东西:

function order(words){
    let hasNumber = /\d/;
    let newSentence = words.split(" ")
    let tempSentence = words.split(" ")

    for (let i = 0; i < newSentence.length; i++){
      for (let j = 0; j < newSentence[i].length; j++){
        if (hasNumber.test(newSentence[i][j])){
          tempSentence[words[i][j]-1] = newSentence[i]
        }
      }
    }
    return tempSentence
}

【问题讨论】:

    标签: javascript arrays indexing


    【解决方案1】:

    创建两个单独的数组并尝试在嵌套循环中重新排列索引对于您要完成的任务似乎相当复杂。一种更简单的方法是只获取一个单词数组,然后 .sort 它通过一个辅助函数从中提取数字,并比较在回调中比较的两个元素的提取数。

    const getNum = word => word.match(/\d+/)[0];
    const order = (words) => words
      .split(' ')
      .sort((a, b) => getNum(a) - getNum(b))
      .join(' ');
    console.log(order('is2 Thi1s T4est 3a'));

    【讨论】:

    • 有趣,非常感谢!就像我说的那样,我是 Javascript 的新手,还没有完全理解箭头函数及其功能。你在排序中用 a 和 b 做什么呢?
    • 排序回调接受两个参数 - 来自正在比较的数组中的两个(基本上是随机的)元素。回调的返回值是正还是负决定了第一个参数是在第二个参数之前还是之后排序。因此,减去每个调用 getNum 的差异将为您提供所需的正/负比较。
    • 有道理,谢谢,前几天晚上我无法理解 sort 的论点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多