###実現したいこと
以下の filteredObj というオブジェクトをループし、service, kind, word を入れています。
実現したいことは、 apple か durian の場合は kind を mix として1つだけ入れて、それ以外はそのまま kind を入れて、最終的に resultArr という配列を得ることです。
###該当のオブジェクト、欲しい配列
jQuery
1const filteredObj = { 2 apple : ["a","b"], 3 banana: ["c"], 4 cherry: ["d", "e"], 5 durian: ["f","g"] 6}; 7 8const resultArr = [ 9 { service: "apple", kind: "mix", word: "あ" }, // kind を mix として1つだけ入れる 10 { service: "banana", kind: "c", word: "あ" }, // kind をそのまま入れる 11 { service: "cherry", kind: "d", word: "あ" }, // kind をそのまま入れる 12 { service: "cherry", kind: "e", word: "あ" }, // kind をそのまま入れる 13 { service: "durian", kind: "mix", word: "あ" } // kind を mix として1つだけ入れる 14]; 15
###発生している問題
mix を入れるまではできましたが、1つでいい apple, durian が kind の数ずつ入ってしまうことが避けられません。
###問題のソースコード
mix を入れるまでは問題なく、以下でできました。ですがこれでは apple,durian がその kind の数ずつ入ってしまいます。
jQuery
1const filteredObj = { 2 apple : ["a","b"], 3 banana: ["c"], 4 cherry: ["d", "e"], 5 durian: ["f","g"] 6}; 7 8let postArgs = []; 9$.each(filteredObj, function(service, kinds) { 10 11 kinds.forEach( kind => { 12 13 if( service === 'apple' || service === 'durian' ){ 14 kind = 'mix'; 15 } 16 17 let postArg = {}; // 実際は localStorage.getItem('postArg') で取得するが、テスト用に空を取得しておく 18 postArg.service = service; 19 postArg.kind = kind; 20 postArg.word = 'あ'; 21 console.log( 'postArg =', postArg ); 22 postArgs.push( postArg ); 23 24 }); 25 26}); 27console.log( 'postArgs =', postArgs );
###試したこと
そこで考えたのが、「すでに apple,durian があるかどうかを判定し、ない場合だけ実行する」 という方法です。
以下がその流れになりますが実現できませんでした。
jQuery
1 2let postArgs = []; 3$.each(filteredObj, function(service, kinds) { 4 5 // すでに apple,durian があるかどうかを判定し、ない場合だけ実行する 6 const serviceArr = postArgs.map(v => v.service); 7 if( !serviceArr.includes('apple') && !serviceArr.includes('durian') ){ 8 9 kinds.forEach( kind => { 10 /* 同上 */ 11 }); 12 13 } 14}); 15console.log( 'postArgs =', postArgs );
また、上の if を以下のように逆の発想で実装しようともしてみましたがやはり解決に至らず、質問させていただきたく思います。
宜しくお願い致します。
jQuery
1if( serviceArr.includes('apple') || serviceArr.includes('durian') ) return false;
###バージョン情報
jQuery3.4.1
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/12 05:44