Javascript JS如何获取回文

Javascript JS如何获取回文,javascript,string,palindrome,Javascript,String,Palindrome,我得到的问题是: 创建一个函数,该函数接受一个单词数组并返回一个仅包含回文的数组 A是一个反向拼写相同的单词 E.g. ['foo', 'racecar', 'pineapple', 'porcupine', 'pineenip'] => ['racecar', 'pineenip'] 这是我创建的代码 let arr = [] let str = words.slice(0) let pal = str.toString().split("").reverse().join("")

我得到的问题是:

创建一个函数,该函数接受一个单词数组并返回一个仅包含回文的数组

A是一个反向拼写相同的单词

  E.g. ['foo', 'racecar', 'pineapple', 'porcupine', 'pineenip'] => ['racecar', 'pineenip']
这是我创建的代码

let arr = []
let str = words.slice(0)
let pal = str.toString().split("").reverse().join("") 
console.log(pal);


for (let i = 0; i < words.length; i++) {
for (let k = 0; k < pal.length; k++) {
 if (words[i] == pal[k]) {
   arr.push(words[i])
 }
 }
 }
 return arr
 }

有人对如何使我的代码工作有任何建议吗?

这是最简单的函数,如果str是否是回文,它将返回true或false。
    function isPalindrome(word) {
        const firstHalf = word.slice(0, Math.ceil(word.length/2));
        const secondHalfReversed = word.slice(Math.floor(word.length/2)).split('').reverse().join('');

        return firstHalf === secondHalfReversed;
    }

    function getPalindromesFromArray(arr) {
        return arr.filter(isPalindrome);
    }

    const wordsArr = ['foo', 'racecar', 'pineapple', 'porcupine', 'pineenip'];

    console.log(getPalindromesFromArray(wordsArr));
我会结合使用过滤函数来过滤所有回文。像这样

function checkPalindrom(str) { //function that checks if palindrome or not
    return str == str.split('').reverse().join('');
}

const result = words.filter(word => checkPalindrom(word)); //filter function that filters array to only keep palindromes

在不给破坏者答案的情况下(这是一个常见的面试问题),干净的方法如下:

  • 定义函数
    isAlindrome(字符串):布尔值
  • 使用数组原型上可用的filter属性返回仅包含回文的数组,例如
    inputArray.filter(isAlindrome)
  • 两者都可以单独进行单元测试,例如:


    您可以为isAlindrome
    [{input:“racecar”,expectedOutput:true},{input:“菠萝”,expectedOutput:false},…]定义一个输入和预期输出数组,并在每个测试用例上循环。
    使用
    for
    循环和
    过滤器

    let arr=[“foo”、“racecar”、“菠萝”、“豪猪”、“松果”、“pap”、“aaaa];
    设回文=arr.filter(w=>{
    设len=w.长度;
    for(设i=0;ilog(回文)
    要解决这个问题,首先我要创建一个isAlindrome函数,如下所示:

    function isPalindrome(word) {
      palindromeWord = ''
      for(var i = word.length - 1; i >= 0; i--) {
        palindromeWord += word.charAt(i)
      }
    
      return palindromeWord === word
    }
    
    let arr =  ['foo', 'racecar', 'pineapple', 'porcupine', 'pineenip']
    
    let palindromeArr = []
    
    arr.forEach(word => {
      if (isPalindrome(word)) {
        palindromeArr.push(word)
      }
    })
    
    console.log(palindromeArr)
    
    然后我会像这样检查数组中的每个单词:

    function isPalindrome(word) {
      palindromeWord = ''
      for(var i = word.length - 1; i >= 0; i--) {
        palindromeWord += word.charAt(i)
      }
    
      return palindromeWord === word
    }
    
    let arr =  ['foo', 'racecar', 'pineapple', 'porcupine', 'pineenip']
    
    let palindromeArr = []
    
    arr.forEach(word => {
      if (isPalindrome(word)) {
        palindromeArr.push(word)
      }
    })
    
    console.log(palindromeArr)
    

    你所拥有的是好的,但是当你做到的时候

    var pal = str.toString().split("").reverse().join("")
    
    您将数组更改为字符串,然后使用字符串进入循环,因此pal[k]给出的是一个字符,而不是一个单词

    要将pal更改回字符串数组,请再次拆分它,使用

    var pal = str.toString().split("").reverse().join("").split(",");
    
    var words=['foo','racecar','菠萝','horcupine','pineenip'];
    var-arr=[];
    var str=words.slice(0);
    var pal=str.toString().split(“”).reverse().join(“”).split(“”,“”);
    控制台日志(pal);
    for(设i=0;i控制台日志(arr)return str.toLowerCase().split(“”).reverse().join(“”)=str.toLowerCase()
    将使其适用于同时包含大写和小写字母的单词。