尝试按照此处的说明实现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。我已经使用传递的数组完成了这项功能并且它可以工作,但使用函数可以提供更大的灵活性,因此我想了解它为什么不起作用。
答案 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