javascript学习记录-数组(7) 2014/02/24

数组的方法 之 ECMAScript 5 部分

2. map(处理函数)

调用处理函数后,返回新数组,不改变原数组,且若是数组是稀疏的,返回的新数组也是稀疏的。 数组

上例子: 函数

var a = [1, 2, 3];
var b = a.map(function(x) {
    return x * x;
});

b    // [1, 4 ,9]


3. filter(处理函数)

数组元素筛选,处理函数是用来作逻辑判断的,就是若是return true就返回当前的元素值,不然啥也不作,接着筛下1个。注意的一点就是,对于稀疏数组,缺乏的元素会自动跳过。 spa

例1,常规数组 code

var a = [5, 4, 3, 2, 1];
var smallvalues = a.filter(function(x) { return x<3;});
var everyother = a.filter(function(i) { return i % 2 ==0});

smallvalues    // [2, 1]
everyother    // [4, 2]
例2,稀疏数组的状况
var sparse = [5, 4, 3, 2, 1];
delete sparse[3];
sparse    // [5, 4, 3, , 1] 
var dense = sparse.filter(function() { return true; });    // [5, 4, 3, 1]

例子3,手工筛掉 undefined与null 对象

var a= [5, null, 3, undefined, 1];
var b = a.filter(function(x) { return x !== undefined && x !=null; });
b    // [5, 3, 1]


4. every(处理函数) 和 some(处理函数)

函数返回true或者false 索引

遍历数组,若是处理函数中有一项判断return true,则函数停止some()的返回值为true。若是有任意一项return false,则函数停止every()返回false ip

例子 字符串

var a = [1, 2, 3, 4, 5];

// 全部为true,才是true
a.every(function(x) { return x < 10; })    // true
a.every(function(x) { return x > 1; })    // false

// 1项为false,就是false
a.every(function(x) { return x < 3; })    // false
a.every(function(x) { return x < 2; })    // false

// 全部为false,才是false
a.some(function(x) { return x > 10; })    // false
a.some(function(x) { return x > 3; })    // true

// 1项为true,就是true
a.some(function(x) { return x < 3; })    // true
a.some(function(x) { return x > 4; })    // true
a.some(isNaN);    // false,a里不包含非数值元素
// 下面这两个特殊状况

[].every(function(){});    // true

[].some(function(){});    // false


5. reduce(函数, 初始默认值) 和 reduceRight(函数, 初始默认值)

函数返回1个值,若是不指定初始默认值,则数组的第1个元素为初始默认值 io

var a = [1, 2, 3, 4, 5];
var sum = a.reduce(function(x, y) { return x+y; }, 0);    // 15,x的初值是0
var product = a.reduce(function(x, y) { return x*y; }, 1);    // 120,x的初值是1
var max = a.reduce(function(x ,y) { return (x>y)?x:y; });    // 5,没指定初值,x为1

reduceRight只是顺序变了 ast

var a = [2, 3, 4];

var big = a.reduceRight(function(a, b) { return Math.pow(b,a); });    // 2.4178516392292583e+24 var big = a.reduce(function(a, b) { return Math.pow(b,a); });    // 262144

将对象数组中的对象组合成1个对象

function extend(o, p) { 
  for (prop in p) { 
    o[prop] = p[prop]; 
  } 
  return o; 
}
function union(o, p) { 
  return extend(extend({}, o), p);
}
var objects = [{x: 1}, {y: 2}, {z: 3}];
var merged = objects.reduce(union);    // Object {x: 1, y: 2, z: 3}


6. indexOf( 要搜索的值, 偏移量) 和 lastIndexOf(要搜索的值, 偏移量)

与字符串的办法类似,在数组中搜索指定值,只是搜索的方向不同,返回第1个匹配值的索引,没找到就返回-1

var a = [0, 1, 2, 1, 0];
a.indexOf(1);    // 1
a.lastIndexOf(1);    //3
a.indexOf(3);    // -1,没找到

在数组中查找元素,返回全部的查找到元素的索引

function findall(a, x) {

    var results = [],

    len = a.length,

    pos =0;

    while(pos <len) {

        pos = a.indexOf(x, pos);    // 指定偏移量

        if(pos == -1) break;

        results.push(pos);

        pos = pos +1;

    }

    return results;

}
findall(a, 1);    // [1, 3]
相关文章
相关标签/搜索