Java と JavaScript で配列やリストや連想配列 (マップ) に値があるか調べる記法の比較
TL; DR
オブジェクトに対して、指定の値が存在すれば true を返してくれるようなメソッド類を調べた。
Object | Java | JavaScript |
---|---|---|
Array | Arrays.AsList(array).contains(value) |
Array#includes(value) ・Array#indexOf(value) >= 0 |
List | List#contains(value) |
- |
Key in Map | Map#containsKey(key) |
Key in Map |
Value in Map | Map#containsValue(value) |
※ #values() … 自作関数 Map.prototype.values().indexOf(value) >= 0 |
Java で配列に特定の値があるか
String[] array = { "hoge", "fuga", "foo", "bar" };
// Arrays#asList() で List に変換し、List#contains() を使う
if(Arrays.asList(array).contains("hoge")) {
// "hoge" があったよ
}
- 参考 : http://java.keicode.com/lang/arrays-contain-check.php
- 参考 : 【Java】配列に特定の値が含まれているか確認する - オープンリファレンス
Java でリストに特定の値があるか
上述のとおり List#contains()
が使える。内部的には List#indexOf()
を使っているようだ。
List<String> list = new ArrayList<String>();
list.add("hoge");
list.add("fuga");
list.add("foo");
list.add("bar");
if(list.contains("hoge")) {
// "hoge" があったよ
}
if(list.indexOf("fuga") >= 0) {
// "fuga" があったよ
}
if(list.indexOf("something") < 0) {
// #indexOf() は値がないときは -1 を返すから、この場合は "something" がなかったよ
}
Java でマップに特定のキーがあるか
Map<String, String> map = new HashMap<String, String>();
map.put("Apple", "りんご");
map.put("Tangerine", "みかん");
map.put("Peach", "もも");
if(map.containsKey("Apple")) {
// Map 中に "Apple" というキーがあるよ
}
- 参考 : HashMap | Javaコード入門
Java でマップに特定のデータ (Value) があるか
キーではなく値の方の存在チェック。
Map<String, String> map = new HashMap<String, String>();
map.put("Apple", "りんご");
map.put("Tangerine", "みかん");
map.put("Peach", "もも");
if(map.containsValue("もも")) {
// Map 中に "もも" というデータがあるよ
}
JavaScript で配列に特定の値があるか
JavaScript の配列とリストはほぼ同義なのでこれで。
// Java の配列は {} で囲むけど JavaScript は [] なんだよね…よく間違える
var array = [ "hoge", "fuga", "foo", "bar" ];
if(array.includes("foo")) {
// 配列に "foo" があるよ
}
if(array.indexOf("fuga") >= 0) {
// #indexOf() でも "fuga" があることが分かるよ
}
Array.prototype.includes
や Array.prototype.indexOf
がないブラウザの場合は、自分で追加すれば使える。以下に代替コードが紹介されているのでどうぞ。
- 参考 : Javascriptで配列にある値が存在するかどうかを確認する方法について - 主にプログラムを勉強するブログ
- 参考 : Array.prototype.includes() - JavaScript | MDN
- 参考 : Array.prototype.indexOf() - JavaScript | MDN
- 参考 : Javascriptで配列内に特定の要素が存在するかどうかの判定 - Qiita
JavaScript で連想配列に特定のキーがあるか
連想配列。オブジェクト。ハッシュ。マップ。どれもだいたい同じ。
var hash = {
"Apple": "りんご",
"Tangerine": "みかん",
"Peach": "もも"
};
// in という演算子で分かる
if("Peach" in hash) {
// Hash 中に "Peach" というキーがあるよ
}
JavaScript で連想配列に特定のデータ (Value) があるか
調べたけどネイティブだと存在しなさそう。Underscore.js には Object.values()
というメソッドがあって、これが連想配列の値たちを取り出した配列を返してくれるので、これをパクって定義すると使えそう。
// 連想配列 (オブジェクト) のデータ (値) を配列にして返すメソッドを自前で定義する
Object.prototype.values = function() {
var o = this;
var r = [];
for(var k in o) {
if(o.hasOwnProperty(k)) {
r.push(o[k]);
}
}
return r;
};
var hash = {
"Apple": "りんご",
"Tangerine": "みかん",
"Peach": "もも"
};
if(hash.values().indexOf("もも") >= 0) {
// Hash 中に "もも" というデータがあるよ
}