備忘録。
目的:__場所ごと__にデータを分けて使用したい。
#前提
勉強に付随するデータを見える化するアプリを作っているため、
- 日にち
- 場所
- 集中度
- 勉強内容
- 勉強時間
入力した回数分オブジェクトを複数生成。 posts = [] に格納。
※一例 (axiosを利用しているため型の宣言付)
const obj = {
nowTime: {stringValue: "2021年2月26日19時47分"},
studyArea: {stringValue: "マクドナルド"},
studyDensity: {stringValue: "普通"},
studyContent: {stringValue: "JavaScript"},
studyTime: {integerValue: "3"} //hour
}
const posts = [{obj}, {obj}, {obj}...];
場所を被りなしで抽出して配列にしている。
const areas = ['マック', 'イオン', 'タリーズ', 'サンマルク'];
##解答
const separateArea = [];
const separate = function() {
let sortObj = [];
for (let i = 0; i < areas.length; i++) {
posts.forEach(post => {
// index→0
if (post.studyArea.stringValue.indexOf(areas[i]) !== -1) {
sortObj.push(post);
}
});
separateArea.push(sortObj);
sortObj = [];
}
}
##解説
- 分けたオブジェクトを最終的に格納する separateArea を定義。
- 同値の__studyArea__をもつオブジェクトを配列にするため sortObj を定義。
- postsの要素(post)にareasの__i番目__と同じ名前の__studyArea__があればsortObjにそのオブジェクトをpush.これをpostsの要素数分行う。(forEach, indexOf)
- studyAreaが一致するオブジェクトを__洗い出したら__sortObjを__separateAreaにpush__.
- sortObjを空に。
- areasの要素数分ループ。
##ポイント
indexOf
indexOf() メソッドは、呼び出す String オブジェクト中で、 fromIndex から検索を始め、指定された値が最初に現れたインデックスを返します。値が見つからない場合は -1 を返します。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf
特定のvalueが合致するオブジェクト同士で配列を作りたかったためvalue同士を比べるために使用。
もっといい方法があれば教えてください。