ES6の配列処理
2019/02/03
forEach
配列の各要素に1回ずつ処理を実行する
const products = [
{
name: 'きゅうり',
type: '野菜' },
{
name: 'マグロ', type: '魚'
},
{
name: 'キャベツ',
type: '野菜'
},
{
name: 'えび',
type: '甲殻類'
}
];
//products配列を1つずつconsole.logで出力
products.forEach(function(product){
console.log(product)
});
結果
{name: "きゅうり", type: "野菜"}
{name: "マグロ", type: "魚"}
{name: "キャベツ", type: "野菜"}
{name: "えび", type: "甲殻類"}
map
処理をして新しい配列をつくる
const products = [
{
name: 'きゅうり',
type: '野菜'
},
{
name: 'マグロ',
type: '魚'
},
{
name: 'キャベツ',
type: '野菜'
},
{
name: 'えび',
type: '甲殻類'
}
];
//products配列のnameのみで配列を作成
const names = products.map(function(product){
return product.name;
});
結果
["きゅうり","マグロ","キャベツ","えび"]
filter
条件に一致したもので新しく配列をつくる
const products = [
{
name: 'きゅうり',
type: '野菜'
},
{
name: 'マグロ',
type: '魚'
},
{
name: 'キャベツ',
type: '野菜'
},
{
name: 'えび',
type: '甲殻類'
}
];
//typeが野菜のものだけで新しくyasaiProducts配列を作成
const yasaiProducts = products.filter(function(product){
return product.type === "野菜"
});
console.log(yasaiProducts)
結果
[
{name: "きゅうり", type: "野菜"}
{name: "キャベツ", type: "野菜"}
]
find
条件に一致する最初の要素を返す
const products = [
{
name: 'きゅうり',
type: '野菜'
},
{
name: 'マグロ',
type: '魚'
},
{
name: 'キャベツ',
type: '野菜'
},
{
name: 'えび',
type: '甲殻類'
}
];
//typeが野菜のものは2つあるが、findは最初の要素のみを返すため「きゅうり」の要素のみが返ってくる
const yasai = products.find(function(product){
return product.type === '野菜'
})
console.log(yasai)
結果
{ name: 'きゅうり', type: '野菜'}
some,every
someは配列の要素の1つ以上が条件を満たすとき「true」、1つも満たすものがなかったとき「false」を返す
everyは配列の要素の全てが条件を満たすとき「true」、それ以外「false」を返す
some
const numbers = [0,1,2,3,20];
const someNum = numbers.some(function(number){
return number <= 10;
});
console.log(someNum);
結果
10以下ではない数値(20)があるが1つ以上が10以下のためtrue
true
every
const numbers = [0,1,2,3,20];
const everyNum = numbers.every(function(number){
return number <= 10;
});
console.log(everyNum);
結果 10以下ではない数値(20)があるためfalse
false
reduce
配列の各要素に対して(左から右へ)関数を適用し、単一の値にする
reduceでよくある配列の要素を全て足す使い方
numbersの配列の数字を全て足してみます
sumの値は前回の結果が入る
sumは初期値0で指定
- 1回目は0(初期値)+ 10
- 2回目は10(1回目の結果) + 20
- 3回目は30(2回目の結果)+ 30
で結果60になる
初期値は0である必要はないので10で指定したら結果は70になり、20で指定したら結果は80になります
const numbers = [10,20,30];
numbers.reduce(function(sum,number){
return sum + number
},0);
結果
60
primaryColorsのcolorのみで配列を作る
mapでできますがreduceでやってみます
初期値を空の配列で指定
- 空の配列にredをpush
- [red]にblueをpush
- [red,blue]にgreenをpush
結果[red,blue,green]になります
const primaryColors = [
{
color: 'red'
},
{
color: 'blue'
},
{
color: 'green'
}
];
primaryColors.reduce(function(previous,primaryColor){
previous.push(primaryColor.color);
return previous;
},[]);