【问题标题】:Return arrays within subarrays by length of greater than or less than 3 using filter使用过滤器按大于或小于 3 的长度返回子数组中的数组
【发布时间】:2016-10-13 09:28:40
【问题描述】:

您好,我正在尝试实现数组过滤器属性,以使用两个单独的函数对大于和小于 3 的子数组进行排序。在进一步纠正我的功能方面,我不知所措。有人可以帮忙解释一下为什么我会得到当前的结果。

var subarrays = [
    [1,2,3],
    ['a','b','c','d','e'],
    ['hippopatamus', 'zebra', 'crocodile','lion'],
    [false, 2]
];

var greaterThan3 = function(array){ 
    for(var i = 0; i < array.length; i ++){
        if(array[i].length > 3) {
            return array[i];
        } else {
            return false;
        }
    }
};

var lessThan3 = function(array){
    var arr = [];
    for(var i = 0; i < array.length; i ++){
        if(array[i].length < 3){
            arr.push(array[i]);
        } else {
            return false;
        }
    }
    return arr;
};

当我返回大于时,只显示动物名称。似乎长度只指单词的长度,而不是数组本身的长度。如何定位数组的长度。小于我只得到单个字母。我再次查看数组本身的长度,而不是它的内容。谢谢。

【问题讨论】:

    标签: javascript arrays filter sub-array


    【解决方案1】:

    你只得到动物的原因是,如果你没有将大于函数的结果推送到不同的数组中,那么由于最后一个子数组是动物数组,它总是返回你的动物子数组。

    var 子数组 = [[1,2,3], ['a','b','c','d','e'], ['河马', '斑马', '鳄鱼', '狮子'], [假, 2]];

    您可以使用arrayforEach 函数来迭代子数组。

    var greaterArray = [];
    
    subarrays.forEach(function(subArray){
    
    if(subArray.length>3)
    {
    greaterArray.push(subArray);
    }
    });
    

    或者

    您也可以使用filter 方法更干净地实现它

    subArrays.filter(function(subArray)
    {
    return subArray.length>3;
    });
    

    filter 方法接受truthyfalsy 值,并基于此,在内部创建一个新的array,并使用truthy 值并返回新的array

    【讨论】:

      【解决方案2】:

      如果您只想从子数组中过滤长度 > 3 的数组,您可以使用内置过滤器: subarrays.filter(function(a) { return a.length &gt; 3; })

      如果您想了解过滤器是如何实现的,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

      【讨论】:

        【解决方案3】:

        我正在尝试实现数组过滤属性

        不确定您是否要向原型中添加功能。

        如果是这样,那么你可以这样做。

        大于和小于 3

        您可以使用forEach 并检查每个数组的长度

         var subarrays = [[1,2,3], ['a','b','c','d','e'], ['hippopatamus', 'zebra', 'crocodile','lion'], [false, 2]];
        Array.prototype.sub3 = function(array){
        var _newArray=[];
        subarrays.forEach(function(item){
           if(item.length !==3){
         _newArray.push(item)
        }
        })
        return _newArray
        }
        console.log(subarrays.sub3())
        

        JSFIDDLE

        【讨论】:

          【解决方案4】:

          这样的?

          var subarrays = [[1,2,3], ['a','b','c','d','e'], ['hippopatamus', 'zebra', 'crocodile','lion'], [false, 2]];
          
          
          var lessThan3 = function(arr) {
             return arr.filter(function(a) {
               return a.length < 3
             })
          }
          
          var greaterThan3 = function(arr) {
             return arr.filter(function(a) {
               return a.length > 3
             })
          }
          

          【讨论】:

            猜你喜欢
            • 2017-03-16
            • 2016-12-20
            • 2015-04-08
            • 1970-01-01
            • 2020-12-13
            • 1970-01-01
            • 2019-12-25
            • 1970-01-01
            • 2018-08-09
            相关资源
            最近更新 更多