繁体   English   中英

从数组中删除字符串,但在 Javascript 中添加数字数量

[英]Removing a String from an Array, but adding the Number amount back in Javascript

我正在尝试为国际象棋创建一个 FEN 符号转换器。 我决定最好的方法是从不需要的字符串中删除任何不必要的值。 这是它的样子。

rnbqkbnr/pppppppp/8/

这些都是我的代码中的字符串。 我已经为每个文件的末尾找到了解决方案,该文件由字符串中的/表示。 但是我的新问题是去掉数值并添加回空白方块以覆盖它们。

当您在 FEN 中看到一个数字时,这实质上是国际象棋桌上有多少个空方格,直到下一个棋子。 再一次,我自己的想法是把这些数字(比如8转换为11111111一系列代表每个必须为空的方块的数字。

在实践中,我假设我只能将8 splice起来,然后开始用1填充该索引,这似乎是可行的选择,但不幸的是,将数字移动到不同的位置时会出现问题。

会有人有更好的选择吗? 是的,我知道已经有一些库可以实现这一点,但是如果您不尝试重新发明轮子几次,那么编码的乐趣何在。

CorrectFen 函数 - 在字符串上映射以查找任何数字

  const correctFen = () => {
    newFen.map((pos, index) => {
      if (Number(pos) && pos !== '/'){
        for (let i = 0; i < Number(pos); i++) {
          console.log('firing')
          setNewFen(addAfter(newFen, index + i, '1'))
        }
      }
    })
    console.log(newFen)
    figureOutPos()
  }

看了这个之后,它并没有真正删除我想要的索引,这里可能有问题,它在最后一个/之后添加了1 s

function addAfter(array, index, newItem) {
  return [
    ...array.slice(0, index),
    newItem,
    ...array.slice(index)
  ];
}

看起来您正在从map回调中修改newFen 这确实会弄乱索引,因为当前索引之后的所有内容都会发生变化。

相反,从map回调中返回新字符。 在大多数情况下,这将是原始字符,但如果它是一个数字,您将返回一个由多个字符组成的字符串。 然后再次将数组连接成一个字符串。

像这样的东西:

// Assuming newFen is a string in some outer scope.
const correctFen = () => {
  const correctedFen = newFen
    // Split the string into an array of single characters.
    .split('')
    // Apply a function to each character and gather the results in an array.
    .map((char, _index) => {
      // Try to parse `char` as an integer.
      const number = parseInt(char)
      if (isNaN(number)) {
        // `char` is not a digit. Return the character itself.
        return char
      } else {
        // `char` is a digit. Return a string of that many 1s.
        return '1'.repeat(number)
      }
    })
    // Join the array back into a string.
    .join('')
  setNewFen(correctedFen)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM