AngularJs - 添加新的 属性 到 item 使用 .indexOf 给出双重值

AngularJs - Adding new property to item gives dulpcate values using .indexOf

我在添加值之前使用以下方法检查数组中的重复值:

vm.onGridItemChanged = function (resource) {

     if (vm.modifiedItems.indexOf(resource) === -1) {
        vm.modifiedItems.push(resource);
     } 
};

这很管用,可以提供我想要的行为。但是我现在还需要添加 EnglishValue,所以我更改为:

vm.onGridItemChanged = function (resource, englishText) {

        var modifiedItem = {Resource: resource, EnglishValue: englishText};

        if (vm.modifiedItems.indexOf(modifiedItem) === -1) {
            vm.modifiedItems.push(modifiedItem);
        } 

    };

然而,这破坏了功能,我现在得到了重复的值?为什么会这样?

编辑 - 我的 josn 包含 $$hashKey 个值,但仍然导致重复问题:

[
  {
    "Resource": {
      "ResourceId": "Account_AccountVerified_Success_Title",
      "LocaleId": "de",
      "ResourceSet": "/WebResources",
      "Value": "Erfolg55",
      "Comment": "Success",
      "Editing": false,
      "$$hashKey": "object:3861"
    },
    "EnglishValue": "Success",
    "$$hashKey": "object:40483"
  },
  {
    "Resource": {
      "ResourceId": "Account_AccountVerified_Success_Title",
      "LocaleId": "de",
      "ResourceSet": "/WebResources",
      "Value": "Erfolg55",
      "Comment": "Success",
      "Editing": false,
      "$$hashKey": "object:3861"
    },
    "EnglishValue": "Success",
    "$$hashKey": "object:40488"
  }
]

您必须将 JSON 对象转换为字符串并检查其索引。因为,你的对象中有 $$hashkey,你首先需要通过 angular.toJson

删除它
vm.onGridItemChanged = function (resource, englishText) {

        var modifiedItem = {Resource: resource, EnglishValue: englishText};
        var modifiedItems = angular.toJson(vm.modifiedItems);
        if (JSON.stringify(modifiedItems).indexOf(JSON.stringify(modifiedItem)) === -1) {
            vm.modifiedItems.push(modifiedItem);
        } 

    };

var a = [{'d':'dasdasd','e':'dasdasda'}, {'d':'dasdasd','e':'dada'}];
var b =  {'d':'dasdasd','e':'dasdasda'};

var index = JSON.stringify(a).indexOf(JSON.stringify(b));

console.log(index);

看到我们得到了字符串中存在的JSON对象的索引。同样,如果 JSON 数组中不存在索引,则索引将为 -1