Array方法之fill、filter、every、some、map、reduce

fill方法

使用指定值填充数组。

语法

array.fill(value [ , start [ , end]])

参数

array:必需。数组对象。
value:必需。用于填充数组的值。
start:可选。用于填充数组值的起始索引。默认值为0。
end:可选。用于填充数组值的结束索引。默认值是this对象的length属性。

备注

如果start为负,则start被视为length+start,其中,length是数组的长度。如果end为负,则end被视为length+end。

实例

[0, 0, 0].fill(7, 1) // [0, 7, 7]
[0, 0, 0].fill(7) // [7, 7, 7]

filter方法

返回数组中的满足回调函数中指定的条件的元素。

语法

array.filter(callback[, thisArg])

参数

array:必需。一个数组对象。
callback:必需。一个接受最多三个参数的函数。对于数组中的每个元素,filter方法都会调用callback函数一次。
thisArg:可选。可在callback函数中为其引用this关键字的对象。如果省略thisArg,则undefined将用作this值。

返回值

一个包含回调函数为其返回true的所有值得新数组。如果回调函数为array的所有元素返回false,则新数组的长度为0。

备注

对于数组中的每个元素,filter方法都会调用callback函数一次(采用升序索引顺序)。不为数组中缺少的元素调用该回调函数。除了数组对象外,filter方法可由具有length属性且具有已按数字编制索引的属性名的任何对象使用。

实例

不带第三个参数

var arr = [5, 'element', 10, 'the', true]

var result = arr.filter(
    function (value) {
        return (typeof value === 'string')
    }
)

console.log(result) // element, the

带第三个参数

var numbers = [6, 12, '15', 16, 'the', -12]

var checkNumericRange = function (value) {
    if (typeof value !== 'number')
        return false
    else
        return value >= this.mininum && value <= this.maxinum
}

var obj = { mininum: 10, maxinum: 20 }

var result = numbers.filter(checkNumericRange, obj)

console.log(result) // 12, 16

every方法

语法

array.every(callback[, thisArg])

参数

array:必需。一个数组对象。
callback:必需。一个接受最多三个参数的函数。every方法会为array中的每个元素调用callback函数,直到callback返回false,或直到到达数组的结尾。
thisArg:可选。可在callback函数中为其引用this关键字的对象。如果省略thisArg,则undefined将用作this值。

返回值

如果callback函数为所有数组元素返回true,则为true;否则为false。如果数组没有元素,则every方法将返回true。

备注

every方法会按升序顺序对每个数组元素调用一次callback函数,直到callback函数返回false。如果找到导致callback返回false的元素,则every方法会立即返回false。否则,every方法返回true。

实例

不带第三个参数

var numbers = [2, 4, 5, 6, 8]

function CheckIfEven(value, index, ar) {
    console.log(value + '')
    if (value % 2 === 0)
        return true
    else
        return false
}

if (numbers.every(CheckIfEven))
    console.log('All are even')
else
    console.log('Some are not even')

// 2 4 5 Some are not even

带第三个参数

var numbers = [10, 15, 19]

var checkNumericRange = function(value) {
    if (typeof value !== 'number')
        return false
    else
        return value >= this.mininum && value <= this.maxinum
}

var obj = { mininum: 10, maxinum: 20 }

if (numbers.every(checkNumericRange, obj))
    console.log('All are within range')
else 
    console.log('Some are not within range')

// All are within range

some方法

语法

array.some(callback[, thisArg])

参数

array:必需。一个数组对象。
callback:必需。一个接受最多三个参数的函数。some方法会为array中的每个元素调用callback函数,直到callback返回true,或直到到达数组的结尾
thisArg:可选。可在callback函数中为其引用this关键字的对象。如果省略thisArg,则undefined将用作this值。

返回值

如果callback函数为任何数组元素均返回true,则为true;否则为false

备注

some方法会按升序索引顺序对每个数组元素调用callback函数,直到callback函数返回true。如果找到导致callback返回true的元素,则some方法会立即返回true。如果回调不对任何元素返回true,则some方法会返回false。

实例

不带第三个参数

var numbers = [1, 15, 4, 10, 11, 22]

function CheckIfEven(value, index, ar) {
    if (value % 2 === 0)
        return true
}

var evens = numbers.some(CheckIfEven)

console.log(evens)
// true

带第三个参数

var numbers = [6, 12, 16, 22, -12]

var isOutsideRange = function (value) {
    return value < this.mininum || value > this.maxinum
}

var range = { mininum: 10, maxinum: 20 }

console.log(numbers.some(isOutsideRange, range))
// true