0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】特定のvalueが合致するオブジェクト同士で配列

Posted at

備忘録。
目的:__場所ごと__にデータを分けて使用したい。
#前提
勉強に付随するデータを見える化するアプリを作っているため、

  • 日にち
  • 場所
  • 集中度
  • 勉強内容
  • 勉強時間

入力した回数分オブジェクトを複数生成。 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 = [];
      }
    }

##解説

  1. 分けたオブジェクトを最終的に格納する separateArea を定義。
  2. 同値の__studyArea__をもつオブジェクトを配列にするため sortObj を定義。
  3. postsの要素(post)にareasの__i番目__と同じ名前の__studyArea__があればsortObjにそのオブジェクトをpush.これをpostsの要素数分行う。(forEach, indexOf)
  4. studyAreaが一致するオブジェクトを__洗い出したら__sortObjを__separateAreaにpush__.
  5. sortObjを空に。
  6. areasの要素数分ループ。

##ポイント
indexOf

indexOf() メソッドは、呼び出す String オブジェクト中で、 fromIndex から検索を始め、指定された値が最初に現れたインデックスを返します。値が見つからない場合は -1 を返します。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

特定のvalueが合致するオブジェクト同士で配列を作りたかったためvalue同士を比べるために使用。
もっといい方法があれば教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?