Javascript 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; } }) 它返回“错

我们有一个包含用户通知数据的对象。我们如何忽略所有以$开头的firebase键?因为在计算对象的大小时

.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发布一个问题。如果你在这个问题上没有得到一个有用的答案,请仔细检查你是否真的以最好的方式提出了这个问题。