Angularjs 从数组中删除$$hashKey

Angularjs 从数组中删除$$hashKey,angularjs,Angularjs,这是我在angular controller中创建的数组 然后我使用push方法将一些值插入到数组中: $scope.appdata = [{name: '', position: '', email: ''}]; 这是插入后的数组值: $scope.appdata.push({name: 'jenson raby', position: '2', email: 'jensonraby@gmail.com'}); 在这里,插入后向数组中添加了一个额外的$$hashKey,但我需要将其从数组中

这是我在angular controller中创建的数组

然后我使用push方法将一些值插入到数组中:

$scope.appdata = [{name: '', position: '', email: ''}];
这是插入后的数组值:

$scope.appdata.push({name: 'jenson raby', position: '2', email: 'jensonraby@gmail.com'});

在这里,插入后向数组中添加了一个额外的
$$hashKey
,但我需要将其从数组中删除。

根据您关于需要将数组插入数据库的评论,我假设您正在将其转换为JSON字符串,然后将其保存到数据库中。如果这是错误的,让我知道,我会看看我是否可以修改这个答案

在将数组转换为JSON时,有两个选项可用于修改数组。第一种是,这是一种方便的方法,在序列化数组(或对象)之前,它会自动删除任何带有前导
$$
的属性名。您可以这样使用它:

$$hashKey:"00F",name:"jenson raby",position:"2",email:"jensonraby@gmail.com",
另一个选项是内置函数的
replacer
参数,如果需要更细粒度的控制,则应使用该选项。replacer函数允许您在将属性序列化为JSON之前过滤或更改属性。您可以这样使用它来剥离
$$hashKey

var json = angular.toJson( $scope.appdata );

针对懒人的快速解决方案:

var json = JSON.stringify( $scope.appdata, function( key, value ) {
    if( key === "$$hashKey" ) {
        return undefined;
    }

    return value;
});

angular.toJson方法背后的代码如下:

JSON.parse(angular.toJson($scope.appdata))
调用JSON.stringify方法时,它将删除以$

function toJson(obj, pretty) {
  if (isUndefined(obj)) return undefined;
  if (!isNumber(pretty)) {
    pretty = pretty ? 2 : null;
  }
  return JSON.stringify(obj, toJsonReplacer, pretty);
}
因此,要在Sean的asnwer上构建,您可以重写JSON.stringify方法来完成您需要它做的事情。 要从angular的文档中了解更多信息,请访问:


我不会说调用angular.toJson方法是懒惰的。

您是否使用任何AngularJS服务来处理Rest API ike Restangular?我不确定您为什么要删除
$$hashKey
,但如果您的问题真的是“什么是
$$hashKey
?”,我需要将上面的数组插入数据库,这就是为什么我需要删除我感到困惑,我在谷歌chrome和angularjs中正是这样做的,我也尝试了所有其他建议,$$hashKey仍然出现。什么时候插进去的?有什么提示吗?我仍然不明白为什么会发生这种情况,但当我这样做时:
$scope.steps=JSON.parse(angular.toJson($scope.steps));log($scope.steps)
如果我将它保存在另一个变量中,而该变量不在ng中,那么
$$hashKey
就存在了。我认为添加$$hashKey可以跟踪作用域对象作为ID。这在Javascript.VinGarcia中称为可变性,谢谢!由于您的引导,我发现我的ng更改设置为与我的范围相同的内容。即ng change=“categories”,然后是$scope.categories=。。。当我将ng change更改为ng change=“category”时,问题就出现了@肖恩,你好,肖恩,我有一个澄清,有没有可能$$hashkey去复制?我已经使用了JSOn.stringify(Obj),并且我能够在DB中看到重复的hashkey。@MdAslam我不相信
$$hashkey
-它只是一个用来跟踪更改的ID。您不应该将其用作唯一标识符。这是一个很好的解决方案,非常适合我的用例。你知道replacer函数是否会改变原始对象吗?@AdamSpecker它不会改变原始对象,只会改变字符串化的方式。
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;
}