0

javascriptまたはjqueryに何らかのフィルター機能が組み込まれていると確信していますが、jqueryを使用してこれを行う方法がわかりませんfilter()

特定の値を持つ JavaScript オブジェクトからすべての要素をフィルタリングしてオブジェクトを返す方法はありますか?

私が求めている機能はこのようなもので、それほど長くはありませんが、もっと簡単なものがあるのだろうか.

ありがとう!

(function(){
  var obj = {
    a: true,
    b: true,
    c: false,
    d: true,
    e: true

  },
  f = [],
  true_obj = {};

  for (var i in obj){
    if (obj[i] === true){
      f.push(i);
    }
  }
  for (var c = 0; c < f.length; c++){
    true_obj[c] = f[c];
  }
  console.log(true_obj);

}());

JSBIN

4

4 に答える 4

1

プロトタイプの拡張は避けたほうがよいでしょう。私の解決策はこれです:

obj オブジェクトにフィルター メソッドを作成し、HasOwnProperty()を使用して、プロパティがオブジェクトに直接送信されているか、プロトタイプ チェーンから取得されているかを確認しています。

(function(){
      var obj = {
        a: true,
        b: true,
        c: false,
        d: true,
        e: true
      },
     true_obj = {};

     obj.filter = function (value) {
        var result = [];

        for (var key in this) {
           if (this.hasOwnProperty(key)) {
             if (this[key] === value){
               result.push(key);  
              }
           }
        }

        return result;
     };

    var f = obj.filter(true);

    for (var c = 0; c < f.length; c++){
      true_obj[c] = f[c];
    }
    console.log(true_obj);

}());

ここにJSBINがあります

于 2013-04-02T21:06:23.940 に答える
1
function filterObject(object, predicate) {
  var result = {};
  for(var prop in object) {
    if(predicate(object[prop])) {
      result[prop] = object[prop];
    }
  }
  return result;
}
(function(){
  var obj = {
    a: true,
    b: true,
    c: false,
    d: true,
    e: true

  };
  var true_obj = filterObject(obj, function(item) {
    return item === true;
  });
  console.log(true_obj);

}());
于 2013-04-02T21:05:25.650 に答える
-1

ObjectJavaScriptのオブジェクトのプロトタイプを単純に拡張して、そのような関数を含めることができます。

どのような機能が必要か正確にはわかりませんfilterが、例を次に示します。

Object.prototype.filter = function(val){
    for (var e in this) {
        if (this[e] === val) delete this[e];
    }
}

// Object.defineProperty(Object.prototype, "filter", { value:Object.prototype.filter, enumerable:false }); // this line will make the new method not enumerable, see discussion with Ian

// Example:
var obj = {a:"1", b:"2", c:"1"};
obj.filter("1");
alert(obj.a); // undefined
于 2013-04-02T20:53:41.573 に答える