比较两个数组并返回有效和放错位置的元素

Comparing two arrays and returning valid and misplaced elements

提问人:wasphellion 提问时间:1/27/2023 最后编辑:wasphellion 更新时间:1/27/2023 访问量:81

问:

我想为我的第一个项目制作一个简单的游戏,但我在它背后的逻辑上遇到了一些问题。 游戏应该比较两个数组,其中一个存储用户输入,另一个随机生成。两个数组的长度都为 n(假设 n=3),并接受 n 个唯一字符作为其值。假设用户输入是 ['A','A', 'B'],获胜组合是 ['B', 'A', 'C']。win 条件很简单,用户输入数组中的所有三个元素都必须有效。如果元素的值和索引都对应于第二个数组中的元素,则该元素有效。 检查这一点很简单:

for (let i = 0; i<arr1.length; i++) {
    for (let j = 0; j<arr1.length; j++){
        if (arr[i] === arr1[j] && getIndices(arr[i], arr1[j]) === true){
                valid ++;
            }

但是,我还想跟踪放错位置的元素,其中 arr[i] 与 arr[j] 的值匹配,但对其索引的相等检查返回 false。问题来了,如果我把它放在 else 语句中,并将 ['A', 'B', 'A'] 与 ['A', 'C', 'C'] 进行比较,它将返回 1 有效,但也有 1 放错了位置,这是不正确的,因为“A”只在第二个数组中出现一次。您将如何设置语句来避免这种情况?

我对此很陌生,所以我没有尝试太多。

JavaScript 数组 条件语句 逻辑 比较

评论


答:

0赞 javigala98 1/27/2023 #1

这就是JS的方式。

const userList = ['A', 'B', 'C'];
const winList = ['A', 'B', 'A'];

const scoreCalculator = ({ user, win }) => {
  let points = 0;
  user.forEach((value, index) => {
    if (value === win[index]) {
      points++;
    }
  });
  
  return points;
  
}

console.log(scoreCalculator({user: userList, win: winList}));

成本将为 O(n)。

正常执行。

const userList = ['A', 'B', 'C'];
const winList = ['A', 'B', 'A'];

const scoreCalculator = ({ user, win }) => {
  
  let points = 0;
  for(let i = 0; user.list; i++) {
    if (user[i] === win[i]) {
      points++;
    }
  });
  
  return points;
  
}

console.log(scoreCalculator({user: userList, win: winList}));

正如你所看到的,Array.prototype.forEach()的工作方式与正常情况一样。

0赞 Musa Kavak 1/27/2023 #2

如果输入值和 win 条件的长度相同,则不需要两个 for 循环。并正确命名您的变量:和 。inputscondition

var points = 0
var misplacedElements = []

for (let i = 0; i<inputs.length; i++) {
   //findIndex returns index of the element on the condition array
   //If element don't exist returns -1
   const indexOfInput = condition.findIndex(e=> e === inputs[i])

   if(indexOfInput != -1){
      //Element contains but might not be on the same index
      if(indexOfInput == i){
         //On the same index so give a point
         points++
      }else{
        //Hold the index or the element depends to your need
        misplacedElements.push( i )
      }
   }

如果你不明白,你可以问。

评论

0赞 wasphellion 1/27/2023
我的错误,你是对的,但我将如何存储放错位置的元素?
0赞 Musa Kavak 1/27/2023
哦,我现在明白了。对不起,我会编辑它