当前位置: 首页 > 知识库问答 >
问题:

比较两个数组之间的值

严柏
2023-03-14

我试图建立一个函数,检查一个单词或文本是否是回文。要做到这一点,它拆分文本,使每个字母都是一个新数组的元素,它去掉空白,并建立反向数组。然后检查两个数组中处于相同位置的每个元素是否相等。如果不是,则返回false,如果是,则返回true。这里的函数是:

js prettyprint-override">function palindrome(str) {
  var low = str.toLowerCase();
  var newArray = low.split("");
  var noSpace = newArray.filter(function(val) {
    return val !== " ";
  });
  var reverse = noSpace.reverse();
  
  function check (a, b) {
    console.log(`checking '${a}' against '${b}'`);
    var partial;
    var result = 1;
    for (var i = 0; i < a.length; i++) {
      console.log(`comparing '${a[i]}' and '${b[i]}'`);
      if (a[i] !== b[i]) {
        result = 0;
      } else {
        partial = 1;
        result *= partial;
      }
    }
    return result;
  }
  
  var result = check(noSpace, reverse);
  if (result == 1) {
    return true;
  } else {
    return false;
  }
  
   
}


palindrome("r y e");

我不知道出了什么问题,但是不管我传递给函数什么单词或文本,函数似乎都在返回一个真值。那有什么不好?

共有1个答案

桂阳文
2023-03-14

您的问题似乎是因为reverse()也更改了实际的数组。这样做

var reverse = noSpace.reverse();

将反转nospace并在变量reverse上指定对它的引用。也就是说,两个数组将是同一个(反向)数组。

为了避免这种情况,我使用.slice()创建了原始数组的副本,然后对新数组调用.reverse(),从而避免了任何冲突。

function palindrome(str) {
    var str_array = str.toLowerCase().split("");
    var no_space = str_array.filter(function(val) {
        return val !== " ";
    });

    // By applying '.slice()', we create a new array
    // reference which can then be reversed and assigned
    // to the 'reverse' variable
    var reverse = no_space.slice().reverse();

    function check(a, b) {
        var partial;
        var result = 1;
        for(var i=0; i < a.length; i++) {
            if(a[i] !== b[i]) {
                // We don't need to keep
                // comparing the two, it
                // already failed
                return 0;
            } else {
                // I've kept this part even though
                // I don't really know what it is
                // intended for
                partial = 1;
                result *= partial;
            }
        }
        return result;
    }
    return check(no_space, reverse) === 1;
}

console.log(palindrome("a b a"));
console.log(palindrome("r y e"));
 类似资料:
  • 我想比较这两个函数的值。不幸的是,我试图使,但我一直得到。 我想检查如果。这就是我上面完整的代码。

  • 问题内容: 我有这个间隔,当前每5秒执行一次ajax请求。我对声明有疑问。我的代码总是输入它,并且两个json值完全相同,为什么它认为它们不同? 编辑 这是控制台输出(虚线是分隔请求,它不在实际输出中) 问题答案: 不能保证以相同的方式序列化JSON对象,也不能保证属性以相同的顺序进行序列化,使用并不是测试对象相等性的好方法。 一个更好的例子是这样的函数(前一段时间在互联网上找到,希望我能感谢原始

  • 我有一个简单的javascript问题,我真的需要一些帮助!我正在尝试弄清楚如何在数组之间比较元素,以及在下一个循环中再次比较较大的元素。假设我们有数组A和数组B。 我的问题是,在比较索引处的元素之后,我希望在下一个循环周期中比较较大的元素。 如果A=[5,7,4],B=[2,8,5] 在第一个循环中,5与2进行比较,2较小,因此会发生一些事情。在下一个循环周期中,我希望5与8进行比较,而对于现在

  • 问题内容: 与oracle diff 相同:如何比较两个表?除了在MySQL。 假设我有两个表t1和t2,它们的布局相同,但是可能包含不同的数据。 区分这两个表的最佳方法是什么? 更准确地说,我正在尝试找出一个简单的SQL查询,该查询告诉我t1中某一行的数据是否不同于t2中相应行的数据 看来我不能使用相交也不能减去。当我尝试 我收到错误代码: [错误代码:1064,SQL状态:42000]您的SQ

  • 我目前正在创建一个设计不佳的战舰游戏,我已经达到了一个点,我不知道如何从另一个对象访问一些数据。 我有一个板类,它创建两个大小为100的数组。我有一个玩家类,它有属于他们的两块板的实例(他们的板和敌人的板(击中,错过,空)) 我所遇到的问题是,如何使两个玩家的棋盘同步,但在棋盘的功能内,在玩家的内部。。。 我的职能应该是脱离董事会,以便 但是,在player1.boards的功能中,如何访问pla

  • 过滤出数组中比较函数不返回 true 的所有值。 类似于difference ,除了接受一个 comparator (比较函数)。 使用 Array.filter() 和 Array.findIndex() 来查找合适的值。 const differenceWith = (arr, val, comp) => arr.filter(a => val.findIndex(b => comp(a, b