【问题标题】:How do I compare two arrays for different message outcomes?如何比较两个数组以获得不同的消息结果?
【发布时间】:2021-09-14 21:46:21
【问题描述】:

我正在尝试比较两个数组(包含3个整数)并返回一个符合逻辑的提示消息数组

-当数组中的1位数字和位置匹配时,推送“几乎”

-当 1 位匹配但位置不同时推送“不完全”

-当没有数字匹配时推送“不正确”

  • 完全匹配时按“正确”

数组示例:

Array1 = [2,7,6]

ReferenceArray= [2,9,7]

Hint= [“Almost”, “Not Quite”];

到目前为止我的代码:

    function check( array1, referenceArray ) {
    let hint=[];
  for(i=0;i<referenceArray.length;i++){

    for (j=0;j<Array1.length;j++){

      //value and position match
      if ((referenceArray[i] && reference.indexOf[i]) === (Array1[j] && Array1.indexOf[j])) {
      return hint.push('almost');       
      } 
 //value matches but not position
        else if(( referenceArray[i] ===Array1[j]) && !(referenceArray.indexOf[i]===Array1.indexOf[j] )){
        return hint.push('not quite');
        }   
    }// end of Array1 iteration
  } // end of reference  interation

    // if all values and position match
    if(referenceArray===Array1){
    return hint.push("correct");
  }
//if no values match
  else if (referenceArray!==Array1){
    return hintArray.push("incorrect");
  }

【问题讨论】:

    标签: javascript arrays logic


    【解决方案1】:

    我会使用一些内置的 Array 方法来帮助实现这一点:every()、map() 和 findIndex()。

    我通常避免使用.push(),因为它会改变数组。不可变的代码很好读?

    const check = (array, referenceArray) => {
      if (array.every((val, index) => val === referenceArray[index] )) {
        return ['Correct']
      }
    
      const allHints = array.map((val, index) => {
        const refArrayIndex = referenceArray.findIndex(refVal => val === refVal);
        if (refArrayIndex === index) {
          return 'Almost'
        }
        if (refArrayIndex !== -1) {
          return 'Not Quite'
        }
        return undefined 
      });
      
      const hints = allHints.filter((hint) => hint !== undefined);
      if (hints.length > 0) {
        return hints;
      }
      return ['Incorrect']
    };
    
    const hints = check([2,7,6],[2,9,7]);
    console.log('hints', hints)

    【讨论】:

      【解决方案2】:

      我做了这个代码,告诉我它是否有效?

      const array1 = [2,7,6]
      const ReferenceArray = [2,9,7]
      
      function compareArrays(arr){
          let perfect = true
          for(let i = 0; i < ReferenceArray.length; i++){
              if(ReferenceArray[i] != arr[i]) {
                  perfect = false
                  break
              }
          }
          if(perfect) return 'correct'
          let hint = []
          for(let i = 0; i < ReferenceArray.length; i++){
              if(arr[i] == ReferenceArray[i]) hint.push('Almost')
              else if(ReferenceArray.includes(arr[i])) hint.push('Not Quite')
          }
          if(hint.length > 0) return hint
          return 'incorrect'
      }
      
      console.log(compareArrays(array1))

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 2017-01-14
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多