text : {
"Update": "Update it!",
...
}
这是我在角度控制器中创建的数组。
然后我使用push方法将一些值插入到数组中:
$scope.appdata = [{name: '', position: '', email: ''}];
这是插入后的数组值:
$scope.appdata.push({name: 'jenson raby', position: '2', email: 'jensonraby@gmail.com'});
此处在插入后已向阵列添加了额外的$$hashKey:"00F",name:"jenson raby",position:"2",email:"jensonraby@gmail.com",
,但我需要将其从数组中删除。
答案 0 :(得分:47)
根据您需要将数组插入数据库的注释,我将假设您将其转换为JSON字符串,然后将其保存到数据库中。如果这不正确,请告诉我,我会看看我是否可以修改这个答案。
将数组转换为JSON时,您有两种修改数组的选项。第一个是angular.toJson
,这是一种方便的方法,在序列化数组(或对象)之前自动删除带有前导$$
的任何属性名称。你可以这样使用它:
var json = angular.toJson( $scope.appdata );
如果需要更精细的控制,则应使用的另一个选项是内置JSON.stringify
函数的replacer
参数。 replacer函数允许您在将属性序列化为JSON之前对其进行过滤或更改。您可以像这样使用它来剥离$$hashKey
:
var json = JSON.stringify( $scope.appdata, function( key, value ) {
if( key === "$$hashKey" ) {
return undefined;
}
return value;
});
答案 1 :(得分:24)
懒人的快速解决方案:
JSON.parse(angular.toJson($scope.appdata))
答案 2 :(得分:0)
angular.toJson方法背后的代码如下:
function toJson(obj, pretty) {
if (isUndefined(obj)) return undefined;
if (!isNumber(pretty)) {
pretty = pretty ? 2 : null;
}
return JSON.stringify(obj, toJsonReplacer, pretty);
}
调用JSON.stringify方法时,它将删除以$
开头的所有内容function toJsonReplacer(key, value) {
var val = value;
if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
val = undefined;
} else if (isWindow(value)) {
val = '$WINDOW';
} else if (value && window.document === value) {
val = '$DOCUMENT';
} else if (isScope(value)) {
val = '$SCOPE';
}
return val;
}
因此,要基于Sean的提升,您可以重写JSON.stringify方法以完全执行您需要的工作。 要了解更多有关角度访问文档的信息,请访问:https://github.com/angular/angular.js/pull/14221
我不会说调用angular.toJson方法完全是懒惰。