javascript学習記録-配列(7)2014/02/24

3444 ワード

配列の方法の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、従来の配列
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に戻ります.
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番目の要素は初期のデフォルトです.
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は順番が変わっただけです.
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]