2016-12-08 110 views
-1

我要筛选的对象阵列,其看起来像这样滤波器阵列对特定参数

{ 
    "value_1": [ 
    { 
     "ts": "2016-12-05T11:28:49+00:00", 
     "value": 1 
    }, 
    { 
     "ts": "2016-12-05T11:28:55+00:00", 
     "value": 1 
    } 
    ], 
    "value_2": [ 
    { 
     "ts": "2016-12-05T11:28:49+00:00", 
     "value": 56.1 
    }, 
    { 
     "ts": "2016-12-05T11:28:55+00:00", 
     "value": 56.08 
    } 
    ] 
} 

value,并返回家居value其中应该显示:[1, 1, 56.1, 56.08]

这是最好的方式这样做?

回答

2

只是一些地图,减少福

let obj = { 
 
    "value_1": [{"ts": "2016-12-05T11:28:49+00:00", "value": 1}, 
 
     {"ts": "2016-12-05T11:28:55+00:00", "value": 1}], 
 
    "value_2": [{"ts": "2016-12-05T11:28:49+00:00", "value": 56.1}, 
 
     {"ts": "2016-12-05T11:28:55+00:00", "value": 56.08}] 
 
}; 
 

 
let result = Object.keys(obj).map(key => obj[key].map(ts => ts.value)).reduce((acc, value) => acc.concat(value),[]); 
 

 
console.log(result); 
 
console.log('isArray = '+Array.isArray(result)); 
 
result.forEach((item, index) => console.log(`result[${index}]=${item}`));

+0

但这不再是一个数组。这是一个字符串 - 你能告诉我如何防止这个? – edamerau

+0

结果是一个数组。运行更新的代码片段并检查自己。 –

1

您将需要一个解析函数,它将遍历数据对象的递归。

是这样的:

parseObject(obj: any): number[] { 
    const _parse = (obj: any): number[] { 
    if (!obj || typeof(obj) !== 'object') return []; 

    const values = []; 
    Object.keys(obj).forEach(k => { 
     const o = obj[k]; 
     if (k === 'value' && !isNaN(o)) values.push(+o); 
     if (typeof(o) === 'object') values.push(..._parse(o)); 
    }); 

    return values; 
    } 

    return _parse(obj); 
} 

实时演示:https://plnkr.co/edit/c4A0G6zGTa39kQNXyfhv?p=preview

1

使用的for-each还你可以实现你的要求有一个厕所ķ在低于snippest

<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script>document.write('<base href="' + document.location + '" />');</script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.4.12/angular.js" data-semver="1.4.9"></script> 
 
    <script src="app.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <p>Hello {{final}}!</p> 
 
    </body> 
 
<script> 
 
    var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.name = { 
 
    "value_1": [ 
 
    { 
 
     "ts": "2016-12-05T11:28:49+00:00", 
 
     "value": 1 
 
    }, 
 
    { 
 
     "ts": "2016-12-05T11:28:55+00:00", 
 
     "value": 1 
 
    } 
 
    ], 
 
    "value_2": [ 
 
    { 
 
     "ts": "2016-12-05T11:28:49+00:00", 
 
     "value": 56.1 
 
    }, 
 
    { 
 
     "ts": "2016-12-05T11:28:55+00:00", 
 
     "value": 56.08 
 
    } 
 
    ] 
 
}; 
 
$scope.final=[]; 
 
angular.forEach($scope.name,function(k,v){ 
 
    
 
angular.forEach(k,function(x,y){ 
 
    $scope.final.push(x.value); 
 
}); 
 
}); 
 
console.log($scope.final); 
 

 
    
 
}); 
 

 
</script> 
 
</html>