首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在数组JavaScript中查找重复项

在数组JavaScript中查找重复项
EN

Stack Overflow用户
提问于 2018-07-25 22:56:02
回答 3查看 164关注 0票数 1

所以我正在开发一个简单的基于网络的JavaScript游戏。目标是猜测一个X位数的随机数。这意味着随机数可以是4,5位,直到你想要的任何数字。你可以在www.juegodescifralo.com上玩这个游戏(它是西班牙语的,很抱歉)。

用户输入一个存储为数组的数字。随机数也以数组的形式生成。两个数组中的单个数字可以重复。

有三种可能的“值/数”类型:“好”的是您选择的与随机数组中的数字位置相同的数字。举个例子:

随机数组为: 1457

用户输入为: 6851

数字5是一个“好”的数字,因为它处于相同的位置。然后是第二种类型的“值”,它们是“常规”的。这意味着它们在随机数中,但不在同一位置。在本例中,数字1将是一个“常规”值。第三种类型是“坏”类型,它们甚至不在随机数组中。

我开发的函数如下:

代码语言:javascript
运行
AI代码解释
复制
function checkNumbers(randomArray, myArray, good, regular, bad) {
    for (var x = 0; x < randomArray.length; x++) {
        var posRepetido = randomArray.indexOf(myArray[x]); //Is current number inside random array?

        if (posRepetido == -1) { //It's not inside
            console.log("number " + myArray[x] + "is not inside");
            bad++;

        } else { //It's inside

            regular++;

            if (myArray[x] == randomArray[x]) { //If it's the same number...
                console.log("number " + myArray[x] + "is in the correct position");

                good++;
                regular--;
            } else { //If it's not the same number

                if (randomArray[posRepetido] != myArray[posRepetido]) {
                    console.log("number " + myArray[x] + "is inside but not in the same position");

                } else {
                    console.log("number " + myArray[x] + "is not inside");

                }
            }
        }
    }

    var obj = { //Return object for accessing later, to show feedback to the user.
        good: good,
        regular: regular,
        bad: bad
    };

    return obj;
}

这段代码有一点buggy。当随机数组中有重复项时,其中一个被标记为好的,那么另一个(即使它存在于用户输入中)将被设置为坏的,而不是应该设置为规则的。

事情变得更加复杂,因为你应该能够玩任何数量的数字。所以我应该能够猜出一个没有“问题”的20位数字。

你可以在www.juegodescifralo.com上自己玩

我该怎么做呢?有什么想法可以让我更容易的访问数组数据吗?非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2018-07-26 00:08:15

相比与-1indexOf比较和myArray[x]的检查,使用includes和数组方法(如forEach )来实现更好的抽象可能要容易得多。您真正需要的只是一个if、一个else if和一个else。例如:

代码语言:javascript
运行
AI代码解释
复制
function checkNumbers(randomArray, userArray, good=0, regular=0, bad=0) {
  userArray.forEach((guess, i) => {
    if (guess === randomArray[i]) good++;
    else if (randomArray.includes(guess)) regular++;
    else bad++;
  });
  return { good, regular, bad };
}



// 4 good
console.log(checkNumbers(
  '1234'.split(''),
  '1234'.split(''),
));
// 4 good, 2 bad
console.log(checkNumbers(
  '1234'.split(''),
  '123456'.split(''),
));
// 4 good, 2 regular
console.log(checkNumbers(
  '1234'.split(''),
  '123412'.split(''),
));
// all regular:
console.log(checkNumbers(
  '123456789123456789'.split(''),
  '912345678912345678'.split(''),
));

票数 0
EN

Stack Overflow用户

发布于 2018-07-26 01:02:19

我认为像这样循环两次会更容易。

代码语言:javascript
运行
AI代码解释
复制
function checkNumbers(randomArray, guessArray) {
  var clone = randomArray.slice(0);
  var good = 0;
  var regular = 0;
  var bad  = 0;
  var visited = [];

  guessArray.forEach(function(guess, index) {
    if (guess === clone[index]) { // the guess is in right position
      good++;
      clone[index] = "x"; // strike it out so it cannot be used later
      visited.push(index);
    } else if (clone.indexOf(guess) === -1) {
      bad++;
      visited.push(index);
    }
  });
  guessArray.forEach(function(guess, index) {
    if (!visited.includes(index)) {
      var match = clone.indexOf(guess);
      if (match !== -1) {
        regular++;
        clone[match] = "x"; // strike it out so it cannot be used later
      }
    }
  });

  return {
    good: good,
    bad: bad,
    regular: regular
  }
}

第一个循环是检查好的和坏的。并去掉它的值,它是好的,所以它不能被再次使用。

第二个循环检查规则,去掉它使用的值,这样它就不能再被使用了。

票数 0
EN

Stack Overflow用户

发布于 2018-07-31 15:40:38

这应该是可行的。

代码语言:javascript
运行
AI代码解释
复制
function guessNumber (numUser, numRandom) {
    if (typeof numUser == 'number') {
        numUser = numUser.toString().split('');
    }
    if (typeof numRandom == 'number') {
        numRandom = numRandom.toString().split('');
    }
 
    if (typeof numRandom != 'object' || typeof numUser != 'object') {
        return false;
    }
 
    if (numRandom == numUser) {
        return true;
    }
 
    var numRegular = {},
        numBuenos = {},
        numMalos = {},
    numRepeat = {};
 
 
    for(var i  = 0; i < numRandom.length; i++) {
      if (!numRepeat[numRandom[i]]) {
        numRepeat[numRandom[i]] = 0;
    }
      numRegular[numRandom[i]] = 0;
      numRepeat[numRandom[i]]++;
  }
 
 
    for (var i  = 0; i < numUser.length; i++) {
        if (numUser[i] == numRandom[i]) {
            numBuenos[numUser[i]] = numUser[i];
        }else if ($.inArray(numUser[i], numRandom)) {
      if (!numRegular[numUser[i]]) {
        numRegular[numUser[i]] = 0;
      }
      if (numRegular[numUser[i]] < numRepeat[numUser[i]]) {
          numRegular[numUser[i]]++;
      } else {
                numMalos[numUser[i]] = numUser[i];
      }
        } else {
            numMalos[numUser[i]] = numUser[i];
        }
    }
 
 
    return {
        regular: Object.values(numRegular).reduce((a, b) => a + b),
        buenos: Object.keys(numBuenos).length,
        malos: Object.keys(numMalos).length
    };
 
}
 
console.log(guessNumber(8365, 8512));
代码语言:javascript
运行
AI代码解释
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51528762

复制
相关文章
多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表
前几天在Python铂金群有个叫【水方人子】的粉丝问了一个关于excel处理的问题,这里拿出来给大家分享下,一起学习。
前端皮皮
2022/08/17
3720
多张excel表做连接,就比如1表有A,B,C列,2表有A,B,D列,我想把A,B,C,D合到一张表
LeetCode 5967. 检查是否所有 A 都在 B 之前
给你一个 仅 由字符 'a' 和 'b' 组成的字符串 s 。 如果字符串中 每个 ‘a’ 都出现在 每个 ‘b’ 之前,返回 true ;否则,返回 false 。
Michael阿明
2022/01/07
3330
用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
数据库中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
全栈程序员站长
2022/07/09
1.8K0
[Office] 如何对Excel二维表中的所有数值进行排序
在Excel中,如果想对一个一维的数组(只有一行或者一列的数据)进行排序的话(寻找最大值和最小值),可以直接使用Excel自带的数据筛选功能进行排序,但是如果要在二维数组(存在很多行和很多列)的数据表中排序的话,就要巧用函数来实现了。
轻舞飞扬SR
2021/02/24
10.6K0
[Office] 如何对Excel二维表中的所有数值进行排序
java中的sort排序算法_vba中sort按某列排序
C++中提供了sort函数,可以让程序员轻松地调用排序算法,JAVA中也有相应的函数。
全栈程序员站长
2022/09/21
2.4K0
Bootstrap列排序
在Bootstrap中,列排序(Column Ordering)是一种布局技术,允许我们在不同屏幕尺寸下重新排列列的顺序。这对于在响应式设计中调整布局非常有用。
堕落飞鸟
2023/05/17
1.1K0
EasyUI中不启用Combobox组件的可编辑模式
Combobox组件默认是可编辑模式的,如果不想让用户可以编辑,只要在data-options中,增加editable设置为false就可以了,如下:
徐大嘴
2019/03/21
1.4K0
Python的可散列对象
注: 本文是对《跟老齐学Python:轻松入门》和《Python大学实用教程》有关字典对象的学习补充和提升。更多有关这两本书的资料,请阅读如下链接:
老齐
2021/03/11
5.1K0
Python的可散列对象
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/07/14
2.1K0
如何检查 MySQL 中的列是否为空或 Null?
如何检查 MySQL 中的列是否为空或 Null?
在MySQL数据库中,我们经常需要检查某个列是否为空或Null。空值表示该列没有被赋值,而Null表示该列的值是未知的或不存在的。在本文中,我们将讨论如何在MySQL中检查列是否为空或Null,并探讨不同的方法和案例。
网络技术联盟站
2023/08/03
4.5K0
如何检查 MySQL 中的列是否为空或 Null?
第四章 为IM 启用填充对象之启用和禁用表空间的IM列存储(IM 4.5)
第一章 Oracle Database In-Memory 相关概念(IM-1.1)
Yunjie Ge
2022/04/23
6680
第四章 为IM 启用填充对象之启用和禁用表空间的IM列存储(IM 4.5)
把表中的所有错误自动替换为空?这样做就算列数变了也不怕!
小勤:这个我知道啊。但是这个表的列是动态的,下次多了一列这个方法就不行了,又得重新搞一遍。
大海Power
2021/08/30
2.2K0
【DB笔试面试540】在Oracle中,如何列举某个用户下所有表的注释及列的注释?
可以使用DBA_TAB_COMMENTS视图来查询表的注释,使用DBA_COL_COMMENTS视图来查询列的注释。它们的示例分别如下所示:
AiDBA宝典
2019/09/29
3K0
【DB笔试面试540】在Oracle中,如何列举某个用户下所有表的注释及列的注释?
Excel中两列(表)数据对比的常用方法
Excel中两列数据的差异对比,方法非常多,比如简单的直接用等式处理,到使用Excel2016的新功能Power Query(Excel2010或Excel2013可到微软官方下载相应的插件)实现各种复杂的数据整理后再进行对比,可以根据实际需要选择使用。
大海Power
2021/08/30
17.8K0
SpringBoot返回枚举对象中的所有属性以对象的形式返回(一个@JSONType解决)
最近小编在开发中遇到个问题,就是关于枚举方面的使用。一些固定不变的数据我们可以通过枚举来定义,减少对数据库的查询。是一种常见的开发技巧!
掉发的小王
2022/07/11
4K0
使用Python实现df的奇数列与偶数列调换位置,比如A列,B列,调换成B列,A列
前几天在Python铂金交流群【瑜亮老师】给大家出了一道Pandas数据处理题目,使用Python实现df的奇数列与偶数列调换位置,比如A列,B列,调换成B列,A列。
Python进阶者
2022/06/05
1.3K0
使用Python实现df的奇数列与偶数列调换位置,比如A列,B列,调换成B列,A列
mysql中kill掉所有锁表的进程
很多时候由于异常或程序错误会导致个别进程占用大量系统资源,需要结束这些进程,通常可以使用以下命令Kill进程:
全栈程序员站长
2022/09/28
3.1K0
Hadoop两列数据的排序
如果利用mapreduce过程的自动排序,只能实现根据第一列排序,现在需要自定义一个继承自WritableComparable接口的类,用该类作为key,就可以利用mapreduce过程的自动排序了。代码如下:
星哥玩云
2022/06/30
1.8K0
点击加载更多

相似问题

是否可以对每行的列进行排序?

20

是否可以对QTreeWidget列中的数字进行排序?

41

React Native的可排序表组件

111

嵌套的jQuery表排序器表,所有可排序

11

启用jquery中的可排序

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档