javascript学習記録-配列(7)2014/02/24
3444 ワード
配列の方法のECMAScript 5部分
2.map(処理関数)
処理関数を呼び出した後、新しい配列を返します.元の配列を変えずに、また、配列がまばらであれば、戻りの新しい配列もまばらです.
前の例:
配列要素フィルタ、処理関数は論理的な判断をするために用いられます.つまり、return trueは現在の要素値を返します.そうでなければ、何もしないで、次のものをふるいます.注意点としては、まばらな配列に対して、欠けている要素は自動的にスキップされます.
例1、従来の配列
関数はtrueまたはfalseを返します.
配列を巡回して、もし処理関数の中にreturn trueがあると判断されたら、関数が中止されます.some()の戻り値はtrueです.いずれかのreturn falseがある場合、関数はevery()を中止してfalseに戻ります.
例
関数は1つの値を返します.初期のデフォルト値を指定しないと、配列の1番目の要素は初期のデフォルトです.
文字列の方法と似ています.指定された値を配列内で検索します.検索の方向が違っているだけで、1番目のピペットのインデックスを返します.見つけられなかったら-1に戻ります.
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]