Javascript jQuery按索引不一致的值筛选对象

Javascript jQuery按索引不一致的值筛选对象,javascript,jquery,Javascript,Jquery,我有一个类似的物体 var obj={'Earth':1,'Sky':2,'Tree':3,'Sand':4} 我正在尝试使用此函数根据值进行筛选 $.filter(obj,function(i, value){ return value>3; }); 然而,这是返回空 预期产量 {'Sand':4} 当对象的索引无法一致寻址且可能会发生变化时,是否有一种按值过滤的方法。尝试类似的方法 function filterObjectProperties(obj, filtercb){

我有一个类似的物体

var obj={'Earth':1,'Sky':2,'Tree':3,'Sand':4}

我正在尝试使用此函数根据值进行筛选

$.filter(obj,function(i, value){
  return value>3;
});
然而,这是返回空

预期产量
{'Sand':4}


当对象的索引无法一致寻址且可能会发生变化时,是否有一种按值过滤的方法。

尝试类似的方法

function filterObjectProperties(obj, filtercb){
    var ret = {};
    for(var p in obj)
        if(obj.hasOwnProperty(p))
            if(filtercb(obj[p]))
                ret[p] = obj[p];
    return ret;
}

var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };

var newObj = filterObjectProperties(obj, function(val){
    return val > 3;
});

这可以在没有
$的情况下完成。过滤器

var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };
result = {};
for (var k in obj) {
    if (obj[k] > 3) {
        result[k] = obj[k];
    }
}
console.log(result);
您可以使用JQuery.each()。要使用JQuery.filter和JQuery.grep,我认为对象的格式应该不同

$(function(){

var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };

var result = null;

$.each(obj, function(key, value) {
   if(value > 3){
   result = key;
   }
}); 

console.log(result);

});

应该简单到

var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };

var result = Object.keys(obj)
    .filter(function(e) { return obj[e] > 3 })
    .reduce(function(object, property) { 
         return (object[property] = obj[property], object);
     }, {})

没有任何库

就没有对
对象
的本机
过滤器
,但是这样如何:

var obj={'Earth':1,'Sky':2,'Tree':3,'Sand':4};
newObject={}
Object.keys(obj.map)(函数(值、索引){
如果(obj[值]>3){
newObject[value]=obj[value]
}
});
log(newObject);
//=>{'Sand':4}

您想要的输出是什么?@ZakariaAcharki我已经用预期输出更新了它您不应该使用jQuery来做这件事。使用本机JavaScript进行此操作很简单,而且速度也会更快。看看下面的答案。
.keys()
是否会更有效,因为for-in循环也会枚举原型链中的属性?我没有测试这个假设。由于for-in循环也会枚举原型链中的属性,因此.keys()会更有效吗?我没有测试这个假设。你是对的,它也会循环原型属性,这就是为什么我使用
hasOwnProperty()
,它会过滤掉原型属性。你也可以使用
keys()
,但它的可移植性较差。您需要为旧浏览器添加polyfill。好的,谢谢,这里有一个指向polyfill的链接,供需要它的人使用。注意,我投票认为这是一个非常通用的解决方案。
var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };

var result = Object.keys(obj)
    .filter(function(e) { return obj[e] > 3 })
    .reduce(function(object, property) { 
         return (object[property] = obj[property], object);
     }, {})