質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

1124閲覧

JavaScriptのオブジェクト2次元配列で特定プロパティを取り除きたい

yusuke1

総合スコア19

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2023/01/10 17:53

編集2023/01/11 01:28

前提

JavaScriptのオブジェクトの2次元配列で特定プロパティを取り除きたいです。

例として、以下のような配列があったとします。

const items = [ { id: 1 selectedOptions : [ { name : "色", value : "赤", __typename: 'SelectedOption' }, { name : "個数", value : "10個", __typename: 'SelectedOption' }, ] }, { id: 2 selectedOptions : [ { name : "色", value : "赤", __typename: 'SelectedOption' }, { name : "個数", value : "20個", __typename: 'SelectedOption' }, ] }, { id: 3 selectedOptions : [ { name : "色", value : "赤", __typename: 'SelectedOption' }, { name : "個数", value : "30個", __typename: 'SelectedOption' }, ] }, { id: 4 selectedOptions : [ { name : "色", value : "黒", __typename: 'SelectedOption' }, { name : "個数", value : "10個", __typename: 'SelectedOption' }, ] }, ..... ]

実現したいこと

上の例だと、2次元目のオブジェクトのプロパティである__typename: 'SelectedOption'だけを取り除いた配列にしたい。そのほかはそのままの状態です。

試したこと

以下のよう、mapを駆使してもうまくいかなかったです。

const lineItemProductVariants = items.map((item) => item.map((item.selectedOption) => ({ selectedOptions: { name: selectedOption.name, value: selectedOption.value }, })) );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/01/10 18:24

filter じゃなくて、両方 map で良いのでは…。
yusuke1

2023/01/11 01:29

両方mapにしてみましたが、やはり理想通りの結果になりませんでした...
guest

回答3

0

ベストアンサー

JSON.stringfyreplacerを使用する例

javascript

1items = JSON.parse(JSON.stringify(items, (k,v)=> k == "__typename" ? undefined : v))

投稿2023/01/11 07:04

編集2023/01/11 07:15
fijino

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

たとえばこう

javascript

1const items = []; //略 2const getAllDataWithObject=(obj)=>{ 3 let ret=[]; 4 Object.entries(obj).forEach(ent=>{ 5 ret=ret.concat( 6 ent[1] instanceof Object? 7 getAllDataWithObject(ent[1]): 8 [ent.concat(obj)] 9 ); 10 }); 11 return ret; 12}; 13console.log(JSON.stringify(items)); 14getAllDataWithObject(items).forEach(x=>{ 15 if(x[0]=="__typename" && x[1]=="SelectedOption") delete(x[2].__typename); 16}); 17console.log(JSON.stringify(items));

投稿2023/01/11 01:38

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

与えられたオブジェクトから不要なプロパティを除去したオブジェクトを作って返す関数を作っておきます。(不要なプロパティは複数指定可能にしておきます。)

javascript

1const omit = (obj, props) => 2 Object.fromEntries(Object.entries(obj).filter(([key]) => !props.includes(key)));

上記の omit 関数を使用することで、items の要素の selectedOptions の各要素から __typenameを除去した配列を新たに作成する処理は以下のように書けます。

javascript

1const lineItemProductVariants = items.map(e => ({ 2 ...e, 3 selectedOptions: e.selectedOptions.map(opt => omit(opt, ['__typename'])) 4}));

補足

lodash の _.omit を使うと、冒頭の omit 関数を自作しないで済みます。

投稿2023/01/10 18:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問