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]
相關文章
相關標籤/搜索