【问题标题】:angularjs verify duplicate and set bigger duplicateangularjs验证重复并设置更大的重复
【发布时间】:2018-06-03 22:36:44
【问题描述】:

我有这段代码,我正在检查重复项,如果它是重复的,它具有 isDuplicate 布尔值,但我想扩展我的代码并比较另一个属性,即 colorId 并设置 isBigger 属性,以获得更大的属性:) 你有什么建议吗? 非常感谢

这是我的代码:

$scope.verifyDuplicate = function() {
  var names = [{
    "order": 1,
    "name": "a",
    "shortName": "a",
    "isDuplicate": false,
    "categoryId": 15070,
    "colorId": 50
  }, {
    "order": 2,
    "name": "s",
    "shortName": "s",
    "categoryId": 15071,
    "colorId": 51
  }, {
    "order": 3,
    "name": "h",
    "shortName": "g",
    "focused": 1513262627570,
    "isDuplicate": true,
    "categoryId": 15074,
    "colorId": 54
  }, {
    "order": 4,
    "name": "h",
    "shortName": "h",
    "isDuplicate": true,
    "categoryId": 15075,
    "colorId": 59
  }];
  var sorted, i;

  sorted = names.concat().sort(function(a, b) {
    if (a.name > b.name)
      return 1;
    if (a.name < b.name)
      return -1;
    return 0;
  });
  for (i = 0; i < names.length; i++) {
    if (sorted[i].name !== '') {
      sorted[i].isDuplicate = ((sorted[i - 1] && sorted[i - 1].name === sorted[i].name)) || ((sorted[i + 1] && sorted[i + 1].name === sorted[i].name));
    }
  }
};

【问题讨论】:

    标签: javascript angularjs sorting duplicates


    【解决方案1】:

    您可以使用以下函数引入一个通用函数来根据任何键对对象数组进行排序 -

    $scope.sortByKey = function(array, key) {
        return array.sort(function(a, b) {
            var x = a[key]; var y = b[key];
            return ((x > y) ? -1 : ((x < y) ? 1 : 0));
        });
    };

    使用此函数,您可以根据任何键对对象数组进行排序,并将属性“isLargest”设置为true。您可以查看下面的代码sn-p。

    $scope.verifyDuplicate = function() {
      var names = [{
        "order": 1,
        "name": "a",
        "shortName": "a",
        "isDuplicate": false,
        "categoryId": 15070,
        "colorId": 50
      }, {
        "order": 2,
        "name": "s",
        "shortName": "s",
        "categoryId": 15071,
        "colorId": 51
      }, {
        "order": 3,
        "name": "h",
        "shortName": "g",
        "focused": 1513262627570,
        "isDuplicate": true,
        "categoryId": 15074,
        "colorId": 54
      }, {
        "order": 4,
        "name": "h",
        "shortName": "h",
        "isDuplicate": true,
        "categoryId": 15075,
        "colorId": 59
      }];
      
      var sorted;
      sorted = $scope.sortByKey(names , "colorId");
      
      //To check if the multiple object has largest value
       for(var i = 0; i< sorted.length;i++){
         if(sorted[i] === sorted[0]) sorted[i]["isLargestColorId"] = true;
         else break;
       }
      
    };

    【讨论】:

    • 这个解决方案看起来不错,但我可以将它与我的原始代码检查结合起来检查名称重复吗?
    【解决方案2】:

    利用 ES6 特性

    先找到更大的ColorId对象,然后分配isBigger属性为真

     var names = [{
        "order": 1,
        "name": "a",
        "shortName": "a",
        "isDuplicate": false,
        "categoryId": 15070,
        "colorId": 50
      }, {
        "order": 2,
        "name": "s",
        "shortName": "s",
        "categoryId": 15071,
        "colorId": 51
      }, {
        "order": 3,
        "name": "h",
        "shortName": "g",
        "focused": 1513262627570,
        "isDuplicate": true,
        "categoryId": 15074,
        "colorId": 54
      }, {
        "order": 4,
        "name": "h",
        "shortName": "h",
        "isDuplicate": true,
        "categoryId": 15075,
        "colorId": 59
      }];
    
    var biggerColorId = Math.max.apply(Math,names.map(function(o){return o.colorId;}))
    
    var objOfBiggerColorId = names.find(function(o){ return o.colorId == biggerColorId; })
    
    objOfBiggerColorId.isBigger = true; //set isbigger property true for biggerColorId
    
    // alert(JSON.stringify(objOfBiggerColorId))
    console.log('objOfBiggerColorId ' + JSON.stringify(objOfBiggerColorId))
    
    
    // alert(JSON.stringify(names))
    console.log('names ' + JSON.stringify(names))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 2012-12-02
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多