0

您好我正在尝试实现数组过滤器属性,以使用两个单独的函数对大于和小于 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

4 回答 4

0

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

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

于 2016-06-13T04:12:27.820 回答
0

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

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

您可以使用 的forEach函数array来迭代子数组。

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

于 2016-06-13T04:42:23.270 回答
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

于 2016-06-13T04:15:12.710 回答
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
   })
}
于 2016-06-13T04:18:34.083 回答