第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JavaScript如何對(duì)比兩個(gè)數(shù)組?數(shù)組B根據(jù)數(shù)組A來(lái)做出增刪?

JavaScript如何對(duì)比兩個(gè)數(shù)組?數(shù)組B根據(jù)數(shù)組A來(lái)做出增刪?

JavaScript如何對(duì)比兩個(gè)數(shù)組?數(shù)組B根據(jù)數(shù)組A來(lái)做出增刪? (不用jquery,原生js)具體問(wèn)題是這樣的:每次我checkbox勾選后,都會(huì)將所勾選的所有value得到并聲稱(chēng)arryA,如下:var arrayA = ['a','b','c'];arryB是用來(lái)渲染一個(gè)表格,一個(gè)obj就是一行。每個(gè)td里的值都是可修改的,也就是說(shuō)每個(gè)num[1-4]都可修改,如下:var arrayB = [{    key:'a',    num1:'1',    num2:'2',    num3:'3',    tot:'6'},{    key:'b',    num1:'11',    num2:'22',    num3:'33',    tot:'66'},{    key: 'c',    num1: '111',    num2: '222',    num3: '333',    tot:666}];那么問(wèn)題來(lái)了,每次勾選后,生成arryA的同時(shí)還要將arryB和arryA做對(duì)比,例如我勾選了一個(gè)x:1、如果arryA中有a,arryB中沒(méi)有,那么在arryB中增加一個(gè)key值為a的boj,且其他屬性值可均為'0';如下: {key:'a',num1:'0',num2:'0',num3:'0',tot':0'}2、如果arryA中有a,arryB中也有key值為a的obj,那么arryB則不改變,并且該obj里的其他屬性和屬性值均不變;3、如果取消勾選a,也就是說(shuō)arryA中去掉了a,那么arryB中key值為a的obj整個(gè)刪掉。目的是讓table里的該行刪掉;求各路大神解答,謝謝啦
查看完整描述

1 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

一步一步來(lái)吧!

首先,arrayB的數(shù)組是根據(jù)arrayA來(lái)的,所以肯定是遍歷arrayA,然后再根據(jù)arrayA的元素,在arrayB中進(jìn)行查找。如果有找到記錄就添加進(jìn)去,沒(méi)有就添加{key:'a',num1:'0',num2:'0',num3:'0',tot':0'}。下面看代碼


var arrayA = ['b','c'];

var arrayB = [{

    key:'a',

    num1:'1',

    num2:'2',

    num3:'3',

    tot:'6'

},{

    key:'b',

    num1:'11',

    num2:'22',

    num3:'33',

    tot:'66'

},{

    key: 'c',

    num1: '111',

    num2: '222',

    num3: '333',

    tot:666

}];

//準(zhǔn)備臨時(shí)數(shù)組

var result=[],arr;

//遍歷

for(var i=0;i<arrayA.length;i++){

    //根據(jù)arrayA[i]的值,查找arrayB,如果arrayB中的有滿(mǎn)足條件(arrayB中的對(duì)象,有key值等于arrayA[i])的項(xiàng),就會(huì)返回滿(mǎn)足條件的項(xiàng),否則返回underfind;

    arr=arrayB.find(function(val){return val.key===arrayA[i]});

    //如果arr不是undefind,就會(huì)添加arr,否則添加{key:arrayA[i],num1:'0',num2:'0',num3:'0',tot:'0'}。

arr?result.push(arr):result.push({key:arrayA[i],num1:'0',num2:'0',num3:'0',tot:'0'});

    

}

運(yùn)行一下,結(jié)果正確

https://img1.sycdn.imooc.com//5c7399b30001193f02140300.jpg

但是這樣肯定是不完美的,沒(méi)法復(fù)用。下面用個(gè)方法封裝一下。


function compareArr(arr1,arr2){

    //準(zhǔn)備臨時(shí)數(shù)組

    var result=[],arr;

    //遍歷

    for(var i=0;i<arr1.length;i++){

        //根據(jù)arrayA[i]的值,查找arrayB,如果arrayB中的有滿(mǎn)足條件(arrayB中的對(duì)象,有key值等于arrayA[i])的項(xiàng),就會(huì)返回滿(mǎn)足條件的項(xiàng),否則返回underfind;

        arr=arr2.find(function(val){return val.key===arr1[i]});

        //如果arr不是undefind,就會(huì)添加arr,否則添加{key:arrayA[i],num1:'0',num2:'0',num3:'0',tot:'0'}。

        arr?result.push(arr):result.push({key:arr1[i],num1:'0',num2:'0',num3:'0',tot:'0'});

    }

    return result;

}

https://img1.sycdn.imooc.com//5c7399be0001471c02050333.jpg

代碼或許會(huì)覺(jué)得有點(diǎn)不優(yōu)雅,那就用es6優(yōu)雅一點(diǎn),原理是一樣,遍歷arrayA,根據(jù)arrayA的天涯不是有查找arrayB


function compareArr(arr1, arr2) {

    return arr1.map(item1 => {

        //如果arr2.find(item2 => item2.key === item1),有查找到記錄就返回記錄,否則就返回{ key: item1, num1: '0', num2: '0', num3: '0', tot: '0' }

        return arr2.find(item2 => item2.key === item1)||{ key: item1, num1: '0', num2: '0', num3: '0', tot: '0' }

    })

}    


查看完整回答
反對(duì) 回復(fù) 2019-02-25
  • 1 回答
  • 0 關(guān)注
  • 707 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)