按键值筛选json对象
Filtering json object by key value
我正在尝试通过用户输入过滤json对象。用户将从下拉列表中选择一个数字,然后我希望过滤我的数据并将其返回给他们(通过d3映射)。所以我想我想做的很简单,但我不太确定如何在javascript中做到这一点。
我有一个选择列表的更改功能,用户可以选择要过滤的号码,如下所示:
$scope.slideChange = function(data){
//filter $scope.myData here by data
}
json看起来是这样的(地震中只有一个对象,通常还有更多):
{"count":"349","earthquakes": [{"src":"us","eqid":"b0001mej","timedate":"2011-02-28 23:42:17","lat":"-29.4456","lon":"-112.0629","magnitude":"5.1","depth":"10.3","region":"."}
地震是一系列物体。我希望通过数据和它们各自的大小来过滤对象阵列。因此,如果我收到5,我想过滤任何大小为5.x的东西,除此之外的任何东西都会被过滤掉,保持原始结构。我可以用洛达什,我只是不太确定我会怎么做,因为这对我来说是新的。如果有任何帮助,我将不胜感激!
这是我的第一枪:
_.filter($scope.myData.earthquakes, function(item){
return item.magnitude == data;
});
这是不正确的。我希望恢复最初的结构——去掉不符合过滤器标准的项目。
您对_.filter
的调用不会在位置上过滤数组,而是对其进行克隆并返回克隆,对此您什么也不做。因此,您应该将过滤后的数组重新分配回$scope.myData.earthquakes
。
这是一个带有本地javascript的版本:
$scope.myData.earthquakes = $scope.myData.earthquakes.filter(function(eq) {
return eq.magnitude === data;
});
您必须存储原始数组,然后对其进行筛选以生成克隆。否则,您将丢失原始数据。
看看这个jsFiddlehttp://jsfiddle.net/o274tw43/3/
angular.module('test', [])
.controller('TestCtrl', ['$scope', function($scope) {
var data = {
"count": "349",
"earthquakes": [
{
"src": "us",
"eqid": "b0001mej",
"timedate": "2011-02-28 23:42:17",
"lat": "-29.4456",
"lon": "-112.0629",
"magnitude": "5.1",
"depth": "10.3",
"region": "."
},
{
"src": "us",
"eqid": "b0001mej",
"timedate": "2011-02-28 23:42:17",
"lat": "-29.4456",
"lon": "-112.0629",
"magnitude": "1.1",
"depth": "10.3",
"region": "."
},
{
"src": "us",
"eqid": "b0001mej",
"timedate": "2011-02-28 23:42:17",
"lat": "-29.4456",
"lon": "-112.0629",
"magnitude": "5.3",
"depth": "10.3",
"region": "."
},
{
"src": "us",
"eqid": "b0001mej",
"timedate": "2011-02-28 23:42:17",
"lat": "-29.4456",
"lon": "-112.0629",
"magnitude": "2.1",
"depth": "10.3",
"region": "."
}
]
};
$scope.filter = 'all';
$scope.myData = _.filter(data.earthquakes, function(item) {
item.magnitude = parseFloat(item.magnitude);
return item.magnitude >= 5 && item.magnitude < 6;
});
$scope.$watch('filter', function(value) {
$scope.myData = data.earthquakes;
if(value && !isNaN(value)) {
value = parseInt(value);
$scope.myData = _.filter(data.earthquakes, function(item) {
item.magnitude = parseFloat(item.magnitude);
return item.magnitude >= value && item.magnitude < (value + 1);
});
}
});
}]);
相关文章:
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 用javascript从列表对象(JSON的)构建diffrent选项卡
- php请求带有多个对象json-jquery
- AngularJS,过滤器:如何将一个巨大的对象(JSON)变成一个数组
- 动态属性对象 - JSON
- JavaScript 对象 (JSON) 中的动态设置值
- 从数组查询获取对象 JSON 值时出错
- 使用jQuerygetJSON将多维对象JSON转换为HTML
- 需要从 Angular JS 应用程序中的另一个 JSON 对象数组填充 JSON 数组的每个对象 JSON 对象数组
- 嵌套对象JSON排序JavaScript
- PHP在MySQL中保存来自Javascript的对象"JSON.stringify"通过Ajax
- 将JavaScript对象/ JSON转换为PHP数组
- JSON对象.JSON对象内部
- 访问对象的对象- JSON API
- 数组到对象JSON
- Message":"传入的无效对象(JSON数据格式化问题)