Javascript firebase对象大小:如何使用$忽略属性?
我们有一个包含用户通知数据的对象。我们如何忽略所有以$开头的firebase键?因为在计算对象的大小时Javascript firebase对象大小:如何使用$忽略属性?,javascript,angularjs,firebase,angularfire,angularjs-filter,Javascript,Angularjs,Firebase,Angularfire,Angularjs Filter,我们有一个包含用户通知数据的对象。我们如何忽略所有以$开头的firebase键?因为在计算对象的大小时 .filter('keylength', function() { return function(input) { if (!angular.isObject(input)) { throw Error("input was not an object!") } return Object.keys(input).length; } }) 它返回“错
.filter('keylength', function() {
return function(input) {
if (!angular.isObject(input)) {
throw Error("input was not an object!")
}
return Object.keys(input).length;
}
})
它返回“错误”的号码(我知道它是正确的,但在我们的情况下…)
该对象如下所示:
$$conf: Object
$id: "notifications"
$priority: null
$value: null
__proto__: Object
筛选器返回“1”,它应该返回0,因为该对象没有子节点。
对象。keys
返回数组,然后您可以使用任何方式对其进行筛选:
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:“通知”,
$priority:null,
$$value:null,
测试:“嘿”
};
}).filter('keylength',函数(){
变量ignoreExp=/^\$+/;
返回函数(输入){
如果(!角度等深线(输入)){
抛出错误(“输入不是对象!”)
}
返回对象。键(输入)。过滤器(函数(键){
//return(key.charAt(0)!='$'和key.charAt(1)!='$');
return!ignoreExp.test(键)
}).长度;
}
});代码>
长度={{obj | keydlength}}
我根据您提供的内容写了一个答案。但AngularFire的$asArray()
方法可能会更好地为您服务,该方法基于Firebase集合为您创建一个规则数组(具有长度
属性)。您问题的标题似乎指向另一个主题:Firebase中对象的大小。如果你想知道字符数的大小,那么最好使用Firebase的常规JavaScript API和ref.on('value',function(snapshot){console.log(JSON.stringify(snapshot.val()).length)}
我们使用了$asArray,但是我们需要三向数据绑定,这似乎对Arrays不起作用,你可能需要重新考虑一下:你现在所走的道路似乎注定要经历痛苦。我使用的AngularFire数组具有三向绑定,没有任何问题(例如在中)。如果你不能让他们工作,用MCVE发布一个问题。如果你在这个问题上没有得到一个有用的答案,请仔细检查你是否真的以最好的方式提出了这个问题。