例えば以下のようなコードならどご希望にそえるでしょうか?
javascriptで文字列の中に特定の文字列が存在しているかどうかをチェックするためには
indexOfやincludesを使うことが多いです。
また、filter関数は配列の中から特定の条件に合致する値のみを取り出すことができます。
ここらへんを組み合わせると、文字列の配列の中から特定の文字列が存在するもののみを取り出す事ができます。
TypeScriptで書くなら以下のようになると思います
TypeScript
1const json = {
2 id: 12,
3 point: {
4 id: 1,
5 pointA: 132,
6 pointB: 54,
7 pointC: 234,
8 pointD: 812,
9 pointE: 87,
10 customer_id: 12,
11 },
12}
13
14const res = Object.keys(json.point).filter( key =>{
15 return key.includes('point')
16}).map(key => ({[key]: (json.point as {[key:string]:number})[key]}))
17
18console.log(res)
余談ですが、Unix哲学の中で「スマートなデータを使うつまらないコードを書け」という有名な言葉があります。要は「複雑なロジックが必要になっているということはそもそもデータ構造が良くない」というような考え方なのですが、その考えに沿うなら、そもそも上記のようなfilterコードを書かなければいけないようなデータ構造になっている事自体が良くないのではないかと思います。私なら以下のようなデータ構造にして、filterをかけなくても扱えるようなデータ構造にするかなと思います。
{
customer_id: 12,
pointId:1,
points: {
pointA: 132,
pointB: 54,
pointC: 234,
pointD: 812,
pointE: 87,
},
}
以下はJavascriptのコードです。最初は以下を回答としていたのですが、TypeScriptでは、環境によってはObject.entries()
が動かない場合がある(https://patrickdesjardins.com/blog/typescript-and-object-entries の対応が必要)のでObject.keys()
を使った回答に変更しました。一応回答としては残しておきます。
js
1const json = {
2 id: 12,
3 point: {
4 id: 1,
5 pointA: 132,
6 pointB: 54,
7 pointC: 234,
8 pointD: 812,
9 pointE: 87,
10 customer_id: 12,
11 },
12}
13
14const res = Object.entries(json.point).filter( ([key,value]) =>{
15 return key.indexOf('point') !== -1
16}).map(([key,value]) => ({[key]: value}))
17
18console.log(res)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。