【问题标题】:Why my replacer function in JSON.stringify(value, replacer) doesn't receive keys in Angular application?为什么我在 JSON.stringify(value, replacer) 中的替换函数在 Angular 应用程序中没有接收到键?
【发布时间】:2016-06-11 16:59:09
【问题描述】:

尝试按照此处的说明实现 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

附:我已经用传递的数组完成了这个功能并且它可以工作,但是使用一个函数可以提供更大的灵活性,所以我想了解它为什么不起作用。

【问题讨论】:

  • replacer 不返回任何内容。你想做什么?
  • 实际上你帮我解决了这个问题,如果我没有在第一次调用时返回任何值,它将不会在以下属性上被调用:) 请在此处查看更新的 plunker:plnkr.co/edit/h9NU2xppeGuMSTfTyRng?p=preview,谢谢:)

标签: javascript angularjs json stringify


【解决方案1】:

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

最初它被一个代表对象的空键调用 被字符串化

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

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

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

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 2020-11-24
    • 2011-12-03
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多