1、首先有一個對象列表,結(jié)構(gòu)如下
objectList=[
{
objectId:'object1', // 對象Id
objectName: '對象1', // 對象名稱
parentId:'parent1', // 父用戶Id
childId: 'child1' // 子用戶Id
},
{
objectId:'object2',
objectName: '對象2',
parentId:'parent1',
childId: 'child1'
},
{
objectId:'object3',
objectName: '對象3',
parentId:'parent1',
childId: 'child2'
},
{
objectId:'object4',
objectName: '對象4',
parentId:'parent1',
childId: 'child3'
}]
目的是給出一個childId,返回objectList表中所有符合條件的對象。
這個不僅僅是filter一下這么簡單,還有一個authList數(shù)組來做限制:
限制規(guī)則如下(假設(shè)要從objectList取出childId=‘child1’且type的值包含‘seach’的對象):
1、如果authList數(shù)組為空,那么忽略type,直接過濾objectList,得到結(jié)果。
結(jié)果應(yīng)該是object1和object2兩個對象。
2、如果authList不為空且數(shù)組結(jié)構(gòu)如下,那么則應(yīng)該在步驟1的基礎(chǔ)上還要進行操作:
authList=[
{
objectId:'object1',
childId: 'child1',
type:'add,delete'
},
{
objectId:'object3',
childId: 'child1',
type:'seach'
},
]
那么此時應(yīng)該根據(jù)authList表的type字段來進行判斷。結(jié)果應(yīng)該是object2和object3兩個對象。(authList的第一條記錄的type中沒有seach,不符合條件;第二條記錄的type有search,所以將object3也添加到結(jié)果中);
請問怎么優(yōu)雅的實現(xiàn)上述功能呢?嘗試寫了一下,感覺代碼都是相當(dāng)?shù)膹?fù)雜而且一會兒就把自己繞暈了。請大神指教。
你給的數(shù)據(jù)中authList里的 search拼錯了.
var childId = 'child1';
var type = 'search';
Object.values(objectList.concat(authList).filter(o=>o.childId === childId)
.reduce((t, c)=> {
!!t[c.objectId] ? t[c.objectId].type = (t[c.objectId].type || c.type)
: t[c.objectId] = c;
return t;
}, {}))
.filter(o=> !o.type || o.type.indexOf(type)>-1)
.map(o=>o.objectId);
已解決,想了個相對簡單點的寫法。。。。歡迎大家提出更簡單的寫法~~
var childId = 'child1';
var type = 'search';
let _list = [];
objectList.forEach(object => {
if(object.childId == childId){
let flag = false;
authList.forEach(auth => {
if(auth.objectId==object.objectId){
flag = true;
if(auth.type.indexOf(type)>-1){
_list.push(object);
}
}
})
if(!flag){
_list.push(object);
}
}else{
authList.forEach(auth => {
if(auth.objectId==object.objectId && auth.type.indexOf(type)>-1){
_list.push(object);
}
})
}
})
console.log("最終結(jié)果", _list);
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。