为什么JSON.stringify(value,replacer)中的replacer函数在Angular应用程序中没有收到密钥?

时间:2016-02-28 18:07:47

标签: javascript angularjs json stringify

尝试按照此处的说明实现JSON.stringify:Hide certain values in output from JSON.stringify()并从序列化中排除某些字段,但它不起作用。

例如,在我的控制器中,我有以下代码:

.controller('ExampleController', ['$scope', function($scope) {
    $scope.event = {
      id:1,
      title: 'event title',
      users: [{
        id: 1,
        name: 'Anatoly'
      },{
        id: 2,
        name: 'Roman'
      }],
      private1: 1,
      private2: 2
    };



    var replacer = function(key, value){
        console.log(key);
    };

    $scope.stringified1 = JSON.stringify($scope.event, replacer);

    // $scope.stringified = JSON.stringify($scope.event, ['id','title','users','name']);

 }]);

为什么console.log(key)什么都不打印?调用函数本身,但key参数为空。

我已经在这里做了plunker:http://plnkr.co/edit/U6ZcIuPVr5RzMIBl8X6c?p=preview

我使用的是Angular 1.4.9和Chrome 48.0.2564.116

P.S。我已经使用传递的数组完成了这项功能并且它可以工作,但使用函数可以提供更大的灵活性,因此我想了解它为什么不起作用。

1 个答案:

答案 0 :(得分:1)

好的,这里不清楚:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify但是因为replacer以递归的方式调用它应该返回被调用的对象,root对象本身也是如此:

  

最初使用表示对象的空键调用它   字符串化

你应该返回这个对象,如果你什么都不返回它就不会在这个对象的其他属性上被调用

  

然后为对象或数组上的每个属性调用它   字符串化

所以,多亏了@charlietfl提示,我修复了它,你可以在这里看到固定的plunker:http://plnkr.co/edit/a3S8yGx78b7vJSKwORw5?p=preview