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);
}, {})