firebase 对象大小:如何忽略带有 $ 的属性?
firebase object size: how to ignore properties with $?
我们有一个包含用户通知数据的对象。我们如何忽略所有以 $ 开头的 firebase 键?因为在用
计算对象的大小时
.filter('keylength', function() {
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).length;
}
})
它 return 是 "wrong" 号码(我知道这是正确的,但在我们的例子中......)
对象看起来像这样:
$$conf: Object
$id: "notifications"
$priority: null
$value: null
__proto__: Object
过滤器 returns "1",它应该 return 0 因为对象没有子节点
Object.keys
returns 数组,然后您可以按照自己喜欢的方式对其进行过滤:
return Object
.keys(input)
.filter(function(item) { return item.indexOf('$') != 0; })
.length;
请注意,此解决方案与 Firebase、AngularJS 或 AngularFire 无关。是纯粹的JavaScript.
您可以在过滤器中过滤掉它们。
.filter('keylength', function() {
var ignoreExp = /^$+/;
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).filter(function(key) {
//This is what angular does in angular.copy
//return (key.charAt(0) !== '$' && key.charAt(1) !== '$');
//Or just Filter out the ones that starts with any number of $
return !ignoreExp.test(key);
}).length;
}
});
演示
angular.module('app', []).controller('ctrl', function($scope) {
$scope.obj = {
$$conf: {},
$id: "notifications",
$priority: null,
$$value: null,
test:"hey"
};
}).filter('keylength', function() {
var ignoreExp = /^$+/;
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).filter(function(key) {
//return (key.charAt(0) !== '$' && key.charAt(1) !== '$');
return !ignoreExp.test(key)
}).length;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
Length={{obj|keylength}}
</div>
我们有一个包含用户通知数据的对象。我们如何忽略所有以 $ 开头的 firebase 键?因为在用
计算对象的大小时.filter('keylength', function() {
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).length;
}
})
它 return 是 "wrong" 号码(我知道这是正确的,但在我们的例子中......) 对象看起来像这样:
$$conf: Object
$id: "notifications"
$priority: null
$value: null
__proto__: Object
过滤器 returns "1",它应该 return 0 因为对象没有子节点
Object.keys
returns 数组,然后您可以按照自己喜欢的方式对其进行过滤:
return Object
.keys(input)
.filter(function(item) { return item.indexOf('$') != 0; })
.length;
请注意,此解决方案与 Firebase、AngularJS 或 AngularFire 无关。是纯粹的JavaScript.
您可以在过滤器中过滤掉它们。
.filter('keylength', function() {
var ignoreExp = /^$+/;
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).filter(function(key) {
//This is what angular does in angular.copy
//return (key.charAt(0) !== '$' && key.charAt(1) !== '$');
//Or just Filter out the ones that starts with any number of $
return !ignoreExp.test(key);
}).length;
}
});
演示
angular.module('app', []).controller('ctrl', function($scope) {
$scope.obj = {
$$conf: {},
$id: "notifications",
$priority: null,
$$value: null,
test:"hey"
};
}).filter('keylength', function() {
var ignoreExp = /^$+/;
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).filter(function(key) {
//return (key.charAt(0) !== '$' && key.charAt(1) !== '$');
return !ignoreExp.test(key)
}).length;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
Length={{obj|keylength}}
</div>