js判断对象数组中是否存在某个对象

需求

js判断对象数组中是否存在某个对象_第1张图片需求拖动可设置开始时间和结束时间,点击‘下载’可创建一个时间段的下载任务,当时相同时间段不能重复下载。

需求分析

下载列队为一个数组,任务对象包含开始时间、结束时间和设备id3个属性,属性排序是固定的,那么只需对比数组中的对象与即将添加的对象是否相等即可


方法代码

利用字符串对比和indexOf方法

function isHasObj(arr, val){
     
        var flag = false; // true为有 false为没有
        for(var i=0; i<arr.length; i++) {
     
            if(JSON.stringify(arr[i]).indexOf(JSON.stringify(val)) != -1) {
     
                flag = true;
            }
        }
        return flag ;
    }

使用该方法需注意:如:
var arr = [{name:'张三', sex:'男'}];
var posern = {sex:'男', name:'张三'}
使用isHasObj(arr, posern) 返回为false. 因为上述方法把对象转化成字符串对比,上面2个对象属性排序不一样,转化成字符串之后是2个不同的字符串


示例代码

addDownload(){
     
    var self = this;
    var startTime = self.range.rangStartTime,
        endTime = self.range.rangEndTime,
        task = self.task;

    // 检测数组
    function isHasObj(arr, val){
     
        var flag = false; // true为有 false为没有
        for(var i=0; i<arr.length; i++) {
     
            if(JSON.stringify(arr[i]).indexOf(JSON.stringify(val)) != -1) {
     
                flag = true;
            }
        }
        return flag ;
    }

    if(startTime && startTime){
     
        var obj = {
     
                    "sbbh": self.sbbh,
                    "startTime": startTime,
                    "endTime": endTime
                };

        if(task.length){
     
            var keyIndex = isHasObj(task, obj);
            if(keyIndex){
     
                layer.msg('添加下载任务失败,该任务已经存在');
                return false;
            } else{
     
                task.push(obj);
            }
        } else{
     
            task.push(obj);
        }
    } else{
     
        layer.msg('添加下载任务失败,请核对开始和结束时间');
        return false;
    }
},

补充

上述方法是针对可动态添加对象的数组检测, 如果是固定的数组或者用有唯一主键的数组对比起来会更加简单

示例代码
使用forEachmapfor等方法遍历

arr.forEach(item => {
     
    if(item.name == '张三'){
     
        alert('存在这个元素');
    }
})

利用数组的some()方法


var result = arr.some(item => {
     
   if(item.name == '张三'){
     
      return true 
  } 
})

if(result){
     
  console.log('张三存在');
} else{
     
  console.log('张三不存在');
}

你可能感兴趣的:(Javascript)