使用过滤器返回子阵列中长度大于或小于3的数组

时间:2016-06-13 04:06:02

标签: javascript arrays filter sub-array

您好我尝试使用两个单独的函数来实现数组过滤器属性来排序大于和小于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;
};

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

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

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

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

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

  

大于且小于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

答案 2 :(得分:0)

这样的事情?

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
   })
}

答案 3 :(得分:0)

你只是为了获取动物的原因是,如果你没有将你的大于函数的结果推到另一个数组中,那么由于最后一个子数组是动物数组,它总是会让你回归动物子阵列。

var子阵列= [[1,2,3],[&#39; a&#39;&#39; b&#39;,&#39; c&#39;&#39; d&#39 ;,&#39;],[&#39; hippopatamus&#39;&#39; zebra&#39;,&#39;鳄鱼&#39;狮子&#39;], [false,2]];

您可以使用forEach的{​​{1}}函数迭代子数组。

array

您也可以使用var greaterArray = []; subarrays.forEach(function(subArray){ if(subArray.length>3) { greaterArray.push(subArray); } }); 方法更清晰地实现它

filter

subArrays.filter(function(subArray) { return subArray.length>3; }); 方法接受filtertruthy值,并在此基础上,在内部创建新的falsy,并使用array值并返回新的truthy