我有以下json数据:
"unit 251":{
"path":"M256.57 475.46L251.00 478.71L248.15 478.14L245.46 474.81L253.62 468.11L254.07 467.73L256.10 470.18L256.12 470.20L257.48 470.41L257.48 470.41L258.49 471.59L259.64 472.92",
"name":"unit 251",
"status":"Avaliable",
"color":"#006738",
"size":"3200",
"price":"300 000"
}
还有更多...而且我需要在jquery中添加一个可用的类,为了让我这样做,我需要一些如何按状态对数组进行排序。我目前正在尝试使用以下代码:
//Filter By Status
function filterUnitStatus(unitStatus){
jQuery.grep(json['properties'], function(item){
return item.status == unitStatus;
});
}
//Filter By Status
jQuery('#status').on('change', function(){
var unitStatus = jQuery(this).val();
filterUnitStatus(unitStatus);
});
但我不知道自己在做什么。
任何得到极大赞赏的帮助
答案 0 :(得分:1)
你没有从你的函数返回任何东西,.grep()
创建一个数组,所以返回它!此外,.grep()
没有返回任何内容,我通过获取JSON对象键并迭代来修改它:
//Filter By Status
function filterUnitStatus(unitStatus){
return jQuery.grep(Object.keys(json), function(item) {
return json[item].status == unitStatus;
});
}
答案 1 :(得分:0)
您的过滤器功能最初没有返回任何内容,请将其更改为
function filterUnitStatus(unitStatus){
return jQuery.map(obj, function(el){
if (el.status == unitStatus) return el;
});
}
jQuery.grep()
只接受真实数组作为参数。请改用jQuery.map()
。这将遍历数组或对象,并返回一个包含所有匹配的对象的数组。
tymeJV提供的解决方案包含匹配对象的所有名称,这显然是OP想要的。通过将上述内容修改为
可以实现相同的结果function filterUnitStatus(unitStatus){
return jQuery.map(obj, function(el,id){
if (el.status == unitStatus) return id;
});
}
现在返回的数组将只包含匹配的键。