比较数组-比较两个数组是 删除/新增/更新

先搞清要做什么?
1.比较两个新旧数组,判断是哪种情况------------- 删除/新增/更新 
2.查询字典,利用引用类型的特性返回出对应的对象
测试这个函数需要准备的参数
1.mockoriginConfigValue---旧数据
2.mockconfigValue    -----新数据
3.dictionary         -----字典,用来转换成中文
4.returnObj          ----利用引用类型的特性,返回的obj
即将要测试的函数
findDifferentData(mockoriginConfigValue, mockconfigValue, dictionary, obj)
参数1,参数2
情况1---删除
oldData=[A,B,C]
newData=[A,B]

const oldItem=null; //存放未被删之前的数据 
const newItem=null; //存放找到的被删除后的这条undefined数据

if(oldData.length>newData.length){  '删除'
       for(let i=0;i<oldData.length;i++){
                if(!newData[i]){//说明C不存在于newData里面
                    oldItem=oldData[i]  ==>C
                    newItem=newData[i]  ==>被删后的状态
                }
        }
}

测试用的mock数据用这个测上面的findDifferentData函数
   const mockoriginConfigValue = JSON.parse(`[["457","458"],["457"]]`); 相当于[A,B]
   const mockconfigValue = JSON.parse(`[["457","458"]]`);               相当于[A]
情况2---新增
oldData=[A,B]
newData=[A,B,C]

const oldItem='空'
const newItem=newData[newData.length-1] //最后一条就是新增出来的  即 C


测试用的mock数据用这个测上面的findDifferentData函数
   const mockoriginConfigValue = JSON.parse(`[["457","458"]]`); 相当于[A]
   const mockconfigValue = JSON.parse(`[["457","458"],["457"]]`); 相当于[A,B]
情况3--更新
oldData=[A,B,C]
newData=[A,B,D]

const oldItem=null; //存放更新前的数据 
const newItem=null; //存放更新后的数据

if(oldData.length==newData.length){
      for(let i=0;i<newData.length;i++) {
            if(newData[i] !== oldData[i] ){  //这边要视情况而定 如果C!==D
                oldItem=oldData[i]
                newItem= newData[i]   
            }
      } 
} 
测试用的mock数据用这个测上面的findDifferentData函数
const mockoriginConfigValue = JSON.parse(`[["457","458"],["457"]]`); 相当于[A,B]
const mockconfigValue = JSON.parse(`[["457","458"],["457","333"]]`); 相当于[A,C]
参数3
const dictionary = {
    "332": "332-区块2",
    "333": "333-区块1",
    "349": "349-区块3",
    "429": "429-区块1",
    "430": "430-区块2",
    "431": "431-区域1",
    "442": "442-区块1",
    "443": "443-区块2",
    "457": "457-区块2",
    "458": "458-区块6",
    "459": "459-区块4",
    "460": "460-区块3",
    "461": "461-区块5",
    "462": "462-野生动物园",
    "463": "463-测试新增区块",
    "464": "464-区块8 新",
    "465": "465-区块9 新",
    "466": "466-区块10",
    "467": "467-区块1",
    "468": "468-湘湖及杭州乐园",
    "482": "482-区块12",
    "483": "483-区块13",
    "495": "495-区块1",
    "496": "496-区块2",
    "497": "497-区块3",
    "499": "499-区块2",
    "501": "501-区块4",
    "503": "503-区块4",
    "504": "504-区块1",
    "505": "505-区块2",
    "506": "506-区块1",
    "508": "508-阿里巴巴西溪园区",
    "509": "509-临时",
    "519": "519-区块1",
    "520": "520-区块1",
    "521": "521-区块3",
    "526": "526-区块2",
    "551": "551-name3",
    "558": "558-天安门",
    "559": "559-天坛公园",
    "560": "560-朝阳公园",
    "561": "561-石景山",
    "562": "562-龙德广场",
    "563": "563-朝阳公园",
    "564": "564-东风公园",
    "569": "569-乌鲁木齐市植物园",
    "570": "570-头屯河公园",
    "571": "571-乌鲁木齐市政府",
    "572": "572-乌鲁木齐北郊客运站",
    "574": "574-北京人工体育场",
    "575": "575-成都动物园",
    "576": "576-深圳东站",
    "577": "577-贵阳站",
    "579": "579-青岛站",
    "583": "583-青岛世博园景区",
    "606": "606-台北兴华公园",
    "607": "607-水稚公园",
    "608": "608-水车博览园",
    "609": "609-兰州水车园",
    "610": "610-兰州汽车南站",
    "611": "611-兰州西站",
    "612": "612-龙头山森林公园",
    "640": "640-111",
    "641": "641-222",
    "642": "642-333",
    "644": "644-444",
    "645": "645-萧山机场",
    "647": "647-宋城",
    "650": "650-广化寺",
    "652": "652-666",
    "656": "656-n4",
    "691": "691-123",
    "692": "692-234",
    "693": "693-123",
    "694": "694-123",
    "695": "695-234",
    "696": "696-1",
    "697": "697-2",
    "698": "698-西庐区",
    "699": "699-主区域",
    "700": "700-主配送区块",
    "701": "701-主配送区",
    "711": "711-dddddd",
    "712": "712-123",
    "713": "713-太炎小学",
    "715": "715-99999",
    "720": "720-分区名称",
    "721": "721-n1",
    "722": "722-盒饭",
    "723": "723-n1",
    "724": "724-n2",
    "725": "725-n3",
    "726": "726-dcdcdc1222",
    "727": "727-11111",
    "730": "730-1204",
    "732": "732-XYJ",
    "734": "734-XYJ",
    "735": "735-午潮山",
    "736": "736-西溪园区",
    "737": "737-世树测试",
    "738": "738-世树测试2",
    "739": "739-测试3",
    "740": "740-区块14",
    "741": "741-区块15",
    "742": "742-区块16",
    "743": "743-同济大学",
    "744": "744-上海理工大学",
    "745": "745-杭州南站",
    "746": "746-邵逸夫医院",
    "747": "747-附属儿童医院",
    "748": "748-图书馆",
    "749": "749-大罗山",
    "750": "750-阿里巴巴",
    "751": "751-武林广场"
}
参数4
const obj = {}
运行此函数
function findDifferentData(oldArr, newArr, dictionary, obj) {
    let newItem = [];
    let oldItem = [];
    // 删除情况
    if (oldArr.length > newArr.length) {
        for (let i = 0; i < oldArr.length; i++) {
            if (!newArr[i]) {
                newItem = newArr[i];
                oldItem = oldArr[i];
            }
        }
        Object.assign(obj, {
            status: '删除',
            beforeData: renderAccordingDictionary(dictionary, oldItem),
            afterData: !!renderAccordingDictionary(dictionary, newItem) && !!renderAccordingDictionary(
                dictionary,
                newItem
            ) || '已删'
        });
        console.log(obj)
    } else if (oldArr.length < newArr.length) { // 新增情况
        Object.assign(obj, {
            status: '新增',
            beforeData: '之前无该数据',
            afterData: renderAccordingDictionary(dictionary, newArr[newArr.length - 1])
        })
        console.log(obj)
    } else {
        for (let i = 0; i < newArr.length; i++) {
            if (newArr[i].length !== oldArr[i].length) {
                newItem = newArr[i];
                oldItem = oldArr[i];
            }
        }
        Object.assign(obj, {
            status: '更新',
            beforeData: renderAccordingDictionary(dictionary, oldItem),
            afterData: renderAccordingDictionary(dictionary, newItem)
        })
        console.log(obj)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341