为什么我在 JSON.stringify(值,替换器)中的替换器函数在 Angular 应用程序中没有收到键

Why my replacer function in JSON.stringify(value, replacer) doesn't receive keys in Angular application?

本文关键字:替换 应用程序 Angular 函数 stringify JSON 为什么      更新时间:2023-09-26

尝试实现JSON.stringify,如下所述:隐藏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

附言我已经使用传递数组完成了此功能并且它有效,但是使用函数可以提供更大的灵活性,因此我想了解为什么它不起作用。

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

最初,它被调用时有一个表示对象的空键 被串化

你应该返回这个对象,

如果你不返回任何内容,它不会在这个对象的其他属性上被调用

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

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