【问题标题】:Filter object by keyname按键名过滤对象
【发布时间】:2012-05-04 16:13:42
【问题描述】:

我有一个要过滤的对象。这是我使用的:

query = {
   "teststring-123": "true",
   "teststring-12344566": "false",
   test: "true"
}

我想过滤查询,以便过滤后我只有:

query = {
   "teststring-123": "true",
   "teststring-12344566": "false"
}

$(query).each(function(index, value) {
    $.each(value, function(i, v) {
        if(i.indexOf('teststring-')==-1) {
            // remove part of query object where index is this one       
            console.log(index)
        }
    });     
});

我该如何处理?

【问题讨论】:

    标签: javascript jquery object filter


    【解决方案1】:

    您是否要删除所有没有以“teststring-”开头的键的键值对?如果是这样……

    for(var key in query){
        if(query.hasOwnProperty(key) && key.indexOf('teststring-') === -1){
            delete query[key];
        }
    }
    

    【讨论】:

      【解决方案2】:

      使用delete 运算符:

      $.each(query, function(key, value) {
          if(key.indexOf('teststring-') == -1) {
              delete query[key];
          }
      });     
      

      http://jsfiddle.net/NvZyA/(在此演示中,Object.keys() 用于显示所有键)。

      【讨论】:

        【解决方案3】:

        您可能正在寻找delete 运算符。

        【讨论】:

          【解决方案4】:

          使用delete 运算符:

          var query = {
             "teststring-123": "true",
             "teststring-12344566": "false",
             test: "true"
          }
          $.each(query, function(sKey) {
              if (sKey.indexOf("teststring-") < 0) { // or check if it is not on first position: != 0
                  delete query[sKey];
              }  
          });
          

          【讨论】:

            【解决方案5】:

            正如其他人所说,使用delete 运算符。但是,不需要迭代对象的属性:

            var query = {
                "teststring-123" : true,
                "teststring-12344566" :  false,
                test: true
            };
            
            delete query['test'];
            

            【讨论】:

            • 密钥是事先不知道的。 OP想要删除不以"teststring*开头的键。
            • 是的,Rob W 是对的.. 我不知道还有哪些其他键存在,需要过滤所有不以“teststring”开头的键..
            【解决方案6】:

            像这样?

            var query = {
                "teststring-123": "true",
                "teststring-12344566": "false",
                "test": "true"
            }
            var newobj = {};
            
            $.each(query, function(i, v) {
                if(i.indexOf('teststring-') != -1) {
                    // remove part of query object where index is this one        
                    console.log(i);
                    newarr[i] = v;
                }
            });
            console.log(newobj);
            

            【讨论】:

            • 如果用户可能使用严​​格模式并且它包含在全局插件或其他东西中,那就太好了。
            猜你喜欢
            • 2018-04-03
            • 2019-02-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-31
            • 2016-05-24
            相关资源
            最近更新 更多