【问题标题】:Checking if an array B has an element that is greater than an Element in array A, array are not fo equal length检查数组 B 中的元素是否大于数组 A 中的元素,数组的长度不相等
【发布时间】:2019-08-23 19:08:03
【问题描述】:

我有两个不同长度的数组(A 和 B)。目标是评估 B 是否有一个元素大于 A 中的任何元素。然后将返回的元素推入一个新数组。

我尝试了一个 for 循环遍历每个数组,然后将结果推送到一个新数组,但结果始终未定义。

var A=[1,2,3];
var B=[4,1,6];

function getGreatervalue()
     {
            for(var i=0;i<A.length;i++);
            for (var j=0;j<B.length;j++);
             if(B[j]<A[i]){
        var newarray=[];
            newarray.push(B[j]);
            console.log(newarray);
         }
          }getGreatervalue()

           expected result
            new array=,[4,6];

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    每次满足条件时,您都在声明新数组,也有一些更正,以下是我的版本。

    var newarray=[];
    var A=[1,2,3];
    var B=[4,1,6];
    function getGreatervalue()
    {
        for(var i=0;i<A.length;i++)
        {       
            for (var j=0;j<B.length;j++)
            {           
                if(B[j]>A[i])
                {
                    if(newarray.indexOf(B[j]) == -1)
                    {
                        newarray.push(B[j]);
                    }
                }
            }
        }
        return newarray;
    }
    var result=getGreatervalue();
    console.log(result);
    

    【讨论】:

      【解决方案2】:

      您的代码存在一些问题:

      1. 对于每个A,代码每B循环一次,而对于每个B,它应该在每A循环一次。否则,您会将满足 B 中条件的第一个元素重复添加到结果中(如果您使用 break),或者,如果您不使用,则对于每个 A,每个小于的 B该元素将被添加到结果中。所以,检查每个B,每个A
      2. 每次满足条件时,您都在重新定义结果数组newarray,这会丢弃您之前的结果。结果数组必须在循环之外定义。
      3. 您的条件是B[j] &lt; A[i],这与您的要求相反,即,我引用:“B 是否有一个元素大于 A 中的任何元素。”

      const A=[1,2,3];
      const B=[4,1,6];
      
      function getGreatervalue() {
        const result = []
        for(let i=0;i<B.length;i++) {
          for (let j=0;j<A.length;j++) {
            if(B[i]>A[j]){
              result.push(B[i])
              break;
            }
          }
        }
        console.log(result);
      }
      
      getGreatervalue();
      
      //  expected result
      //   new array=,[4,6];

      这是另一个版本,它使用了更现代的功能,但结果相同:

      const newarray=[];
      const A=[1,2,3];
      const B=[4,1,6];
      function getGreatervalue()
      {
       return B.filter(bEl => A.some(aEl => bEl > aEl))
      }
      
      
      const result = getGreatervalue()
      console.log(result);
      
      //  expected result
      //   new array=,[4,6];

      【讨论】:

        【解决方案3】:

        目标是评估 B 是否有一个元素大于 A 中的任何元素

        所以找到A中的最小值并过滤B

        var A=[1,2,3];
        var B=[4,1,6];
        
        function getGreatervalue(){
          var min = Math.min.apply(null, A)
          return B.filter(num=>num>min)
        }
        console.log(getGreatervalue())

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-21
          • 2018-05-13
          • 2013-03-16
          • 1970-01-01
          • 2015-02-12
          • 2021-11-03
          • 2021-11-16
          相关资源
          最近更新 更多