var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };
我想基於價值篩選使用此
$.filter(obj,function(i, value){
return value>3;
});
然而這是返回空的對象。
預期輸出 {'Sand': 4 }
有一種由值來過濾,當對象的索引不能一貫地解決,並且可以變化。
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;
});
.keys()會更有效,因爲for-in循環枚舉了原型鏈中的屬性?我沒有測試這個假設。 –
你是對的,它也循環原型屬性,這就是爲什麼我使用'hasOwnProperty()',它過濾出原型屬性。 –
你也可以使用'keys()',但它不太方便。您需要爲舊瀏覽器添加一個polyfill。 –
這可以在不$.filter
來完成:
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);
'.keys()'會更有效率,因爲for-in循環枚舉了原型鏈中的屬性?我沒有測試這個假設。 –
你可能在你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 };
function filterObj(obj, valueThreshold) {
var keys = Object.keys(obj);
var result = {};
keys.forEach(function(key) {
var value = obj[key];
if (value > valueThreshold) {
result[key] = value;
}
})
return result;
}
console.log('obj: ' + JSON.stringify(obj));
var filteredObj = filterObj(obj, 3);
console.log('filterdObj: ' + JSON.stringify(filteredObj));
應儘可能簡單
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);
}, {})
沒有任何圖書館
沒有原生filter
到Object
對象,但這個怎麼樣:
var obj = { 'Earth': 1, 'Sky': 2, 'Tree': 3, 'Sand': 4 };
newObject = {}
Object.keys(obj).map(function(value, index) {
if (obj[value]>3){
newObject[value] = obj [value]
}
});
snippet.log(newObject);
// => {'Sand': 4 }
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
你想要的輸出是什麼? –
@ZakariaAcharki我用預期的輸出更新了它 – Joel
你不應該使用jQuery來做到這一點。使用原生JavaScript是一項簡單的操作,而且速度也會更快。看看下面的答案。 –