如何从字符串中删除 First even no?

How to remove First even no from a string?

我给出了一个仅由数字组成的字符串。

例子

let inputString = "1234";

问题

我必须编写一个函数,它将 return 字符串,除了第一个偶数(如果存在的话)

示例输出

"134"

示例代码

let inputString = "1234";

function palindromeRearranging(inputString) {
/// code
}

console.log(palindromeRearranging(inputString));

// output is "1234"

我试过的

let inputString = "1234"

function palindromeRearranging(inputString) {
  let arr = inputString.split("");
 arr = arr.filter((w)=>{return w % 2 !== 0 })
  return arr.join("")

}

console.log(palindromeRearranging(inputString))

但它是return一串所有奇数。

请解释我做错了什么,我该如何实现我的目标。

谢谢你陪我。

使用正则表达式并匹配(仅一次)并删除任何 02468.

的字符

const palindromeRearranging = inputString => inputString.replace(
  /[02468]/,
  ''
);

console.log(palindromeRearranging("1234"));

您正在从字符串中删除所有偶数,只有第一个除外。

@CertainPerformance的答案很好。

但如果您想更正您的功能,那么我的代码片段就可以了。

let inputString = "13"

function palindromeRearranging(inputString) {
  let arr = inputString.split("");
  let remove = arr.filter((w)=>{return w % 2 === 0 });
  if (remove.length < 1){
  return inputString
  }
  arr.splice(arr.indexOf(remove[0]),1);
  return arr.join("")

}

console.log(palindromeRearranging(inputString))

您的功能离实际解决方案不远。目前,您过滤掉所有偶数,因为您错过了检查是否是第一个。

考虑以下几点:

let inputString = "1234";

function palindromeRearranging(inputString) {
  let arr = inputString.split("");
  let firstWasFound = false;
  arr = arr.filter((w)=> {
    if(firstWasFound) {
      return true;
    }
    const isOdd = w % 2 !== 0;
    if(!isOdd){
      firstWasFound = true;
      return false;
    }
    return isOdd;
  })
  return arr.join("")
}


console.log(palindromeRearranging(inputString));

使用了变量firstWasFound,因此它只被删除了一次。

另外,您可以使用.find()获取第一个满足条件的元素:

let inputString = "1234"

function palindromeRearranging(inputString) {
  let arr = inputString.split("");
  const found = arr.find(element => element % 2==0);
  


  return arr.join("").replace(found,'')

}

console.log(palindromeRearranging(inputString))

您使用 Array#findIndexArray#slice

  1. Array#findIndex 匹配第一次出现并停止循环执行
  2. 然后你可以根据匹配的索引
  3. 使用Array#slice拆分数组
  4. parseInt 返回数字而不是字符串

let inputString = "1131"

function palindromeRearranging(inputString) {
  let arr = inputString.split("");
  let ind = arr.findIndex(a => a % 2 === 0)
  let res = ind === -1 ? arr :[...arr.slice(0, ind), ...arr.slice(ind + 1, arr.length)]
  return parseInt(res.join(''))
}

console.log(palindromeRearranging(inputString))