从数组中删除$$ hashKey

时间:2015-09-02 04:08:13

标签: angularjs

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", ,但我需要将其从数组中删除。

3 个答案:

答案 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方法完全是懒惰。