AngularJs - 向item添加新属性使用.indexOf给出dulpcate值

时间:2017-09-19 10:13:19

标签: javascript angularjs 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"
  }
]

1 个答案:

答案 0 :(得分:1)

您必须将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);
        } 

    };

看到我们得到了字符串中存在的JSON对象的索引。同样,如果JSON数组中没有索引,索引将为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);