var str = "abc-a,add-a,ccc-b,ccc-d,abc-a,abc-b,abc-f,tbg-g";
將上面字符串轉(zhuǎn)換成以下數(shù)組形式:
var arr = [
{"name" : "abc", "nameIdx":[{"site" : "a"}]},
{"name" : "add", "nameIdx":[{"site" : "a"}]},
{"name" : "ccc", "nameIdx":[{"site" : "b"},{"site" : "d"}]},
{"name" : "abc", "nameIdx":[{"site" : "a"},{"site" : "b"},{"site" : "f"}]},
{"name" : "tbg", "nameIdx":[{"site" : "g"}]}
]
字符串格式是以abc-y的形式用逗號(hào)拼接起來的。個(gè)數(shù)不限,abc3個(gè)的取值可以是26個(gè)任意英文小寫字母,可以相同。y取值是26個(gè)英文小寫字母只能是一個(gè)。轉(zhuǎn)換后的數(shù)組中"name","nameIdx","site"是字段名稱。
上面幾個(gè)處理都不完備,存在如果輸入數(shù)據(jù)不是排序則結(jié)果不正確的可能。
下面的處理其實(shí)也有一些可能的問題(數(shù)據(jù)可能不是期望的順序),但對(duì)輸入數(shù)據(jù)可以得出完備的結(jié)果
function fn(str){
var tmpObj={};
var newArr=[];
var arr = str.split(",");
arr.map(function(item){ //arr輸出到tmpObj對(duì)象
var itemA=item.split("-");
var key=itemA[0];
var v=itemA[1];
if(tmpObj[key]){ //判斷一個(gè)鍵值對(duì)象是否存在,不存在就初始化,否則就添加新值
tmpObj[key].push(v);
}else{
tmpObj[key]=[v];
}
});
//下面把tmpObj按要求轉(zhuǎn)化為數(shù)組
for( var key in tmpObj){
var tmpO={}
tmpO["name"]=key;
tmpO["nameIdx"]=[];
for(var i=0;i<tmpObj[key].length;i++){
tmpO["nameIdx"].push({"site":tmpObj[key][i]});
}
newArr.push(tmpO);
}
return newArr;
}
可能不是樓上需要的,還是下面符合要求
function s2a(str){
var arr=[];
var lastName='';
str.split(',').forEach(s=>{
const [name,site] = s.split('-');
var cit=arr[arr.length-1];
if(name!=lastName){
lastName=name;
cit={name,'nameIdx':[]};
arr.push(cit);
}
cit['nameIdx'].push({site});
});
return arr;
}可以記錄上一個(gè) name 觀察變化再往結(jié)果添加新項(xiàng),思路供參考
const str = 'abc-a,add-a,ccc-b,ccc-d,abc-a,abc-b,abc-f,tbg-g'
const arr = []
let lastName = ''
str.split(',').forEach(s => {
const [name, site] = s.split('-')
let item = arr[arr.length - 1]
if (name !== lastName) {
lastName = name
item = { name, nameIdx: [] }
arr.push(item)
}
item.nameIdx.push({ site })
})
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。