【问题标题】:Compare two words spelled backwards and forwards is same way in JS比较两个单词向后和向前拼写在JS中的方式相同
【发布时间】:2021-08-12 05:24:44
【问题描述】:

var str = ("level");

arr = Array.from(str);

function repeat(arr) {

  let forward = arr.slice(0, arr.length);
  let backward = arr.reverse();

  console.log(forward);
  console.log(backward);

  if (forward === backward) {
    return true;
  } else {
    return false;
  }
};


var result = repeat(arr);

console.log(result);

我不断得到错误的结果。 如果您有更好的解决方案,请分享,谢谢

【问题讨论】:

  • forwardbackward 永远不会相等,因为它们是不同的对象(数组是 js 中的对象),所以它们与引用进行比较,所以总是结果 false

标签: javascript arrays


【解决方案1】:

这是因为你在比较不同的对象。

在比较之前将它们转换为字符串:

var str = ("level");

arr = Array.from(str);

function repeat(arr) {

  let forward = arr.slice(0, arr.length).join("");
  let backward = arr.reverse().join("");

  console.log(forward);
  console.log(backward);

  if (forward === backward) {
    return true;
  } else {
    return false;
  }
};


var result = repeat(arr);

console.log(result);

反转字符串的方法很好,但是你有很多不必要的步骤。这是一个更优化的版本:

var str = "level";

function repeat(forward) {

  const backward = forward.split("").reverse().join("");

  console.log(forward);
  console.log(backward);

  return forward === backward;
}


var result = repeat(str);

console.log(result);

【讨论】:

    【解决方案2】:

    比较两个数组时,不是比较它们的内容,而是比较数组对象本身。因为 forwardbackward 是不同的数组,所以它们并不相等。

    我建议要么循环遍历两个数组中的每个元素并将它们相互比较,要么将所有元素连接成字符串并进行比较。

    【讨论】:

      【解决方案3】:

      你可以用这个做一些事情

      1)你可以在数组中展开字符串,因为str是一个字符串,而字符串在JS中是可迭代的。

      let arr = [...str];
      

      2)您可以使用spread代替切片以使其更具可读性

        let forward = [...arr];
      

      3)由于reverse已经到位,所以你可以将它散布到一个新的数组中。

      let backward = [...arr.reverse()];
      

      4) 您可以在这里有多个选项,首先使用join,然后进行比较,因为字符串是原始的,并且与已经回答的值进行比较。 所以你也可以在这里使用every

      forward.every((s, i) => s === backward[i]);
      

      var str = "level";
      
      let arr = [...str];
      
      function repeat(arr) {
        let forward = [...arr];
        let backward = [...arr.reverse()];
      
        console.log(forward);
        console.log(backward);
        return forward.every((s, i) => s === backward[i]);
      }
      
      var result = repeat(arr);
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        使用以下代码:

        str === [...str].reverse().join("") // result is true for 'level'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-07
          • 1970-01-01
          • 2017-08-10
          • 2013-07-02
          • 2012-05-21
          • 1970-01-01
          • 1970-01-01
          • 2020-06-15
          相关资源
          最近更新 更多