如何在添加到数组之前检查重复

时间:2016-10-05 10:07:46

标签: javascript angularjs arrays

  1. 嗨,我得到了代码,当列表中的两个相同值 ALREADY 时,可以检查重复内容。如何在之前检查重复的,将第二个相同的值添加到列表中。 PS。我正在处理字符串值。

    var vals = $scope.todoDatat.map(function(item){ return item.time });
                var isDuplicate = vals.some(function (item, idx) {
                    return vals.indexOf(item) !== idx;
                });
    
    
                if (isDuplicate) {
    
                    $scope.errortext = 'time is a duplicate';
    
                } else{
    
                    $scope.todoDatat.push({date: day, time: time, value: 15, arvo: arvosi});
    
                }
    
  2. 当它发现重复时,它不允许我继续添加新值,即重复到列表中。即使找到重复内容,如何继续向列表中添加新值?

  3. 事先判断=)

2 个答案:

答案 0 :(得分:0)

为什么不使用普通对象并检查JavaScript的hasOwnProperty是否存在密钥?

var x = {};  
x['key'] = 'val';  
x.hasOwnProperty('key'); // true //  
x.hasOwnProperty('key2'); // false //

这是一个更高级的用例:

var x = {};
var prefix = 'item_';  
for(var i=0;i<10;i++){
   x[prefix+i] = 'value '+(i+1);
}  
x.hasOwnProperty('item_6'); // true //       
x.hasOwnProperty('other key'); // false // 

删除项目可以这样做:

delete x['key'];

答案 1 :(得分:0)

听起来你正在寻找这样的解决方案:

        $scope.todoItems = ['13:00', '14:00', '15:00'];
        $scope.todoDatat = ['14:00', '22:00'];

        angular.forEach($scope.todoItems, function (item) {
            if ($scope.todoDatat.map(function (x) {return x;}).indexOf(item) >= 0) {
                console.log('Duplicate!');
                // $scope.errortext = 'time is a duplicate';
            } else {
                console.log('Not Duplicate');
                // $scope.todoDatat.push({date: day, time: time, value: 15, arvo: arvosi});
            }
        });

希望它会对你有所帮助。