javascriptの配列処理って結構奥が深いですよね。
今回は、javascriptの配列処理で使えるいくつかのパターンと小技について紹介していきます。
実行内容は、jsonからデータを取得した際に使える内容となっており、今回使うjsonデータのサンプルは以下です。
このサンプルを用いて、javascriptの配列処理の説明をしていこうと思います。
{
"users": [
{
"id": "1234",
"name": "taro",
"frends": [
{
"id": "2222",
"name": "ziro"
}
]
},
{
"id": "4444",
"name": "hana",
"frends": [
{
"id": "6666",
"name": "ken"
}
]
}
]
}
配列操作で定数名:dataを使用するので以下のように定数を作成しておきます。
const json =
{
"users": [
{
"id": "1234",
"name": "taro",
"frends": [
{
"id": "2222",
"name": "ziro"
}
]
},
{
"id": "4444",
"name": "hana",
"frends": [
{
"id": "6666",
"name": "ken"
}
]
}
]
}
const data = json.users;
配列処理1:find
条件に一致するデータを1件返します。
サンプル:
const findData = data.find(item => {
return item.id === "1234";
});
console.log('find', findData);
// 実行結果
{
id: "1234",
name: "taro",
frends: [
id: "2222",
name: "ziro"
]
}
注意点:
条件に一致する値を全て取り出すのではなく、最初にヒットした値のみを取り出します。
そのため、以下のようにidが"1234"のデータが2件あったとしても、取得される値は、最初にヒットするid="1234"、name=taroだけで、hanaのデータは取得されません。
{
"users": [
{
"id": "1234",
"name": "taro"
},
{
"id": "1234",
"name": "hana"
}
]
}
配列処理2:filter
条件に一致するデータを全て返します。
サンプル:
const filterData = data.filter(item => {
return item.id === "1234";
});
console.log('filter', filterData);
// 実行結果
{
id: "1234",
name: "taro",
frends: [
id: "2222",
name: "ziro"
]
}
ちなみに以下のように一行でも書けます。
const filterData = data.filter(item => item.id === "1234");
補足:
findだと最初にヒットするデータ1件だけ取得しますが、filterの場合は条件に一致するデータ全て取得できます。仮にid="1234"のデータが2件以上あれば、全て取得できますよってことです。
配列処理3:forEach
配列の要素を順番に取り出していきます。
data.forEach(item => {
console.log(item);
});
// 実行結果
1回目:{id: '1234', name: 'taro'}
2回目:{id: '4444', name: 'hana'}
配列処理4:map
指定した条件をもとに新しい配列を作成します。
const mapData = data.map(item => {
return item.id;
});
console.log('map', mapData); // ["1234", "4444"]
こちらも一行で記載できます。
const mapData2 = data.map(item => item.id);
console.log('map2', mapData2); // ["1234", "4444"]
指定したオブジェクトのキーで新しい配列の作成も可能です。
const mapData3 = data.map(item => {
return {
id: item.id,
name: item.name
}
});
console.log('map3', mapData3);
// 実行結果
{id: '1234', name: 'taro'}
{id: '4444', name: 'hana'}
小技1:includes
配列の要素に一致する値があればtrueを返し、一致するデータがなければfalseを返します。
const date = ["0201", "0202", "0203"];
const isDate = date.includes("0201");
console.log('isDate', isDate); //true
const date = ["0201", "0202", "0203"];
const isDate = date.includes("0204");
console.log('isDate', isDate); // false
小技2:push
配列に要素を追加します。
const pushData = ["taro", "hana"];
pushData.push("ken");
console.log('pushData', pushData); // ["taro", "hana", "ken"]
jsonデータに新たにデータを追加する場合は、以下のように書けます。
data.push({
id: "3333",
name: "hiro",
frends: [
{
id: "7777",
name: "kaori"
}
]
});
console.log('data', data);
// 実行結果
{id: '1234', name: 'taro', frends: [{...}]}
{id: '4444', name: 'hana', frends: [{...}]}
{id: '3333', name: 'hiro', frends: [{...}]}
小技3:length
配列の要素数を取得します。
const length = data.length;
console.log('length', length); // 2
小技4:配列の先頭または末尾を削除
配列の先頭要素を削除する場合:
const array1 = ["taro", "hana", "ken"];
array1.shift();
console.log('array', array1); // ["hana", "ken"]
要素の先頭のtaroが削除されます。
配列の末尾要素を削除する場合:
const array2 = ["taro", "hana", "ken"];
array2.pop();
console.log('array2', array2); // ["taro", "hana"];
要素の末尾kenが削除されます。
小技5:配列から指定要素を削除
filterを使って、指定要素を削除できます。
const array3 = ["taro", "hana", "ken"];
const newArray1 = array3.filter(item => item !== "hana");
console.log('array3', newArray1); // ["taro", "ken"];
実行結果は、hana以外のデータを取得します。
小技6:forEach内で数量計算する
const sumData = [10, 20, 30];
let sum = 0;
sumData.forEach(item => {
sum += item;
});
console.log('sum', sum); // 60