2

オブジェクトのプロパティからいくつかのVALUEの存在をチェックできるJavaScriptまたはJQueryのループベースではないアプローチはありますか?私が持っているならここに意味します

obj = { prop1:val, prop2:val2 }

おそらく1つのステートメントチェックでそれが可能ですか? objの値の中にval2が存在しますか?

更新1:ここでのループは重要ではありません!JQueryの事前定義された関数でラップされている場合は、ループを使用できます。

更新2: 手作りの関数を書くことはそれほどエレガントではないと思います。このような一般的で通常の問題に対するライブラリベースのソリューションを見つけたいと思います。

4

4 に答える 4

4

いいえ、ループせずに1つのステートメントでオブジェクトに値が存在するかどうかを見つけることはできません。

ネイティブ API またはライブラリを使用できますが、すべての値を内部的にループします。

他のメソッドの通行料は、オブジェクトを反復するのと同じです..だから私はforそれを行うための単純なループを書きます.

この 4 行のコードをスクリプト ファイルに記述し、ライブラリを含める代わりにそのスクリプト ファイルを含めます。どちらも同じです。http://jsfiddle.net/sQW4P/2/ <-- そのような機能が必要な場合。

于 2012-11-30T18:08:45.830 に答える
1

これはjQueryで動作します:

$.grep($.map(obj, function(v,k){return v}), function(el){return el == val2})

次のようにラップできます。

function hasVal(o, v) {
  $.grep($.map(o, function(v,k){return v}), function(el){return el == v}).length > 0
}
于 2012-11-30T18:18:21.880 に答える
1

外部ライブラリの使用に問題がなければ、Underscore.jsはかなり簡潔です。

_.contains(_.values(obj), "val2");
// true

これは Underscore のvaluesメソッドです。

オブジェクトのプロパティのすべての値を返します。

ソースコードからの実装は次のとおりです。

// Retrieve the values of an object's properties.
  _.values = function(obj) {
    var values = [];
    for (var key in obj) if (_.has(obj, key)) values.push(obj[key]);
    return values;
  };

ご覧のとおり、オブジェクト内のキーを繰り返し処理し、それらを配列にプッシュします。いいえ、繰り返しなしでこれを行うことはできません。

于 2012-11-30T18:20:50.650 に答える
0

私が考えることができる唯一の方法はJSONです:

new RegExp(':\"'+val+'\"').test(JSON.stringify(obj))

デモ: http://jsfiddle.net/J4TDS/

関数の使用に問題がない場合は、ライブラリを調べる必要はありません。数バイトしかありません。

function find(o, v) {
    for(var i in o) {
        if (o[i] === v) return true;
    }
}

find(obj, val2);
于 2012-11-30T18:11:54.397 に答える