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é)果正確
但是這樣肯定是不完美的,沒(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;
}
代碼或許會(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' }
})
}
添加回答
舉報(bào)