我为我的Angular应用程序创建了一个实用程序服务。它有两个经常使用的函数。
例如,您有一个对象。
首先,递归地从对象中获取值,而不会抛出未定义错误。
{prop: { nestedProp1: {nestedProp2: somevalue}}};
获取nestedProp2 2,无需进行未定义检查。
其次,在基础上过滤数组
[{prop: { nestedProp1: {nestedProp2: somevalue1}}}, {prop: { nestedProp1: {nestedProp2: somevalue2}}}];
从数组中找到nestedProp2 = somevalue2的对象。
app.service('UtilService', function(httpService) {
this.mapStringKeyVal = function(map, field) {
var lastIdentifiedVal = null;
var parentVal = map;
field.split('.').forEach(function(val){
if(parentVal[val]){
lastIdentifiedVal = parentVal[val];
parentVal = parentVal[val];
}
});
return lastIdentifiedVal;
}
this.arrayPropFilter = function(array, field,value) {
var lastIdentifiedVal = null;
var mapStringKeyVal = this.mapStringKeyVal;
array.forEach(function(arrayItem){
var valueFound = mapStringKeyVal(arrayItem,field);
if(!lastIdentifiedVal && valueFound && valueFound==value){
lastIdentifiedVal = arrayItem;
}
});
return lastIdentifiedVal;
}});
对于当前问题的解决方案,请注入UtilService并调用:
UtilService.arrayPropFilter(purposeArray,'purpose','daily');
或者更高级
UtilService.arrayPropFilter(purposeArray,'purpose.nestedProp1.nestedProp2','daily')