下の4つの配列がありAで残りの3つを調査、結果がB,Dと出したいです。
A[1,2]
B[1,2,3,4,5]
C[1,3,4,5]
D[1,3,4,2]
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ご自身で書かれたコードを質問文に追記いただいたほうが回答を得られやすいと思います。

回答2件
0
ベストアンサー
JavaScript
1function inArrayKeys( arr, keys ) { // ← 指摘いただき、関数名をinから修正 2 return arr.filter( ( ele )=> { return keys.includes( ele ) } ).length === keys.length; 3} 4console.log( inArrayKeys( [ 1, 2, 3, 4, 5 ], [ 1, 2 ]) ); // B ← 指摘いただき、関数名をinから修正 5console.log( inArrayKeys( [ 1, 3, 4, 5 ], [ 1, 2 ]) ); // C ← 指摘いただき、関数名をinから修正 6console.log( inArrayKeys( [ 1, 3, 4, 2 ], [ 1, 2 ]) ); // D ← 指摘いただき、関数名をinから修正
追記:
正解はコメント欄に書かれたコードをごらんあれ。書き直そうとして失敗したコードを自戒のため記録。
JavaScript
1function inArrayKeys( arr, keys ) { 2 return JSON.stringify( arr.filter( ( ele )=> { return keys.includes( ele ) } ).sort() ) === JSON.stringify( keys.sort() ); 3} 4console.log( inArrayKeys( [ 1, 2, 3, 4, 5 ], [ 1, 2 ]) ); // B 5console.log( inArrayKeys( [ 1, 3, 4, 5 ], [ 1, 2 ]) ); // C 6console.log( inArrayKeys( [ 1, 3, 4, 2 ], [ 1, 2 ]) ); // D 7//x console.log( inArrayKeys( [ 1, 1, 3, 4, 2 ], [ 1, 2 ]) ); // [ 1, 1, 2 ] [ 1, 2 ]なので失敗する
投稿2016/07/26 08:03
編集2016/07/26 09:48総合スコア69625
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/26 09:08
この場合、arrやkeysの要素はユニークであるという条件が必要ですよね
console.log( in( [ 1, 1, 3, 4, 5 ], [ 1, 2 ]) );
がtrueになったり
console.log( x_in( [ 1, 3, 4, 5 ], [ 1, 1 ]) );
がfalseになったりします。
指摘ありがとうございます!そうなりますね、抜けていました。ちょっと考えて見ます。
2016/07/26 09:13
一応こんな感じなんだと思いますけど
<script>
function x_in( arr, keys ) {
arr=x_unique(arr);
keys=x_unique(keys);
return arr.filter( ( ele )=> { return keys.includes( ele ) } ).length === keys.length;
}
function x_unique(arr){
return arr.filter(function (x, i, self) {
return self.indexOf(x) === i;
});
}
console.log( x_in( [ 1, 1, 3, 4, 5 ], [ 1, 2 ]) ); // B
console.log( x_in( [ 1, 3, 4, 5 ], [ 1, 1 ]) ); // C
console.log( x_in( [ 1, 3, 4, 2 ], [ 1, 2 ]) ); // D
</script>
※すみませんinが予約後で引っかかる場合がありそうなので勝手に変えました
> ※すみませんinが予約後
すいません、かなり適当に付けてしまったので・・・。あぁ恥ずかしい。
2016/07/26 09:33
Array#reduce を使う方法もありますね。
https://jsfiddle.net/j1y9uk3m/
> think49さん
さすがです!Array#reduce がイメージしにくかったのですが、やっと雰囲気がつかめました。ありがとうございます。
回答ありがとうございます!
ただie11ではincludesメソッドが使用できず動きませんでした。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
2016/07/27 07:19 編集
To: mihara さん
そのURLに Polyfill コードが載っています。あるいは、Array#indexOf で書き換えてもいいですね。
2016/07/26 18:33で私が書いたコードですが、Array.from でシャローコピーすると [1,,3,4] -> [1,undefined,3,4] に変換されてしまうので Array#concat に書き換えました(Object.assign でもOK)。
https://jsfiddle.net/j1y9uk3m/1/
Polyfillのってましたね。。。。ご指摘ありがとうございます。
解決いたしました!

0
まぁ両方forで回してもいいかと思いますがとりあえずjoinしてみては?
javascript
1<script> 2var A=[1,2]; 3var data={"B":[1,2,3,4,5],"C":[1,3,4,5],"D":[1,3,4,2]}; 4for(var i in data){ 5 var str=","+data[i].join(",")+","; 6 var flg=true; 7 for(var j=0;j<A.length;j++){ 8 var reg=","+A[j]+","; 9 if(!str.match(reg)){ 10 flg=false; 11 break; 12 } 13 } 14 if(flg) document.write(i); 15} 16</script> 17
投稿2016/07/26 07:23
総合スコア117902
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。