js数组操作

var str = "abc-a,add-a,ccc-b,ccc-d,abc-a,abc-b,abc-f,tbg-g";

将上面字符串转换成以下数组形式:


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的形式用逗号拼接起来的。个数不限,abc3个的取值可以是26个任意英文小写字母,可以相同。y取值是26个英文小写字母只能是一个。转换后的数组中"name","nameIdx","site"是字段名称。


叮当猫咪
浏览 428回答 3
3回答

慕姐8265434

可以记录上一个 name 观察变化再往结果添加新项,思路供参考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 })})

SMILET

function fn(str){    var newArr = [];    var arr = str.split(",");    arr.map(function(item){       var obj = {           name :  item.split("-")[0],           nameIdx : [{               site : item.split("-")[1]              }]       }       newArr.push(obj);    });    return newArr;}

冉冉说

上面几个处理都不完备,存在如果输入数据不是排序则结果不正确的可能。下面的处理其实也有一些可能的问题(数据可能不是期望的顺序),但对输入数据可以得出完备的结果function fn(str){&nbsp; &nbsp; var tmpObj={};&nbsp; &nbsp; var newArr=[];&nbsp; &nbsp; var arr = str.split(",");&nbsp; &nbsp; arr.map(function(item){&nbsp; //arr输出到tmpObj对象&nbsp; &nbsp; &nbsp; &nbsp;var itemA=item.split("-");&nbsp; &nbsp; &nbsp; &nbsp;var key=itemA[0];&nbsp; &nbsp; &nbsp; &nbsp;var v=itemA[1];&nbsp; &nbsp; &nbsp; &nbsp;if(tmpObj[key]){ //判断一个键值对象是否存在,不存在就初始化,否则就添加新值&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmpObj[key].push(v);&nbsp; &nbsp; &nbsp; &nbsp;}else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmpObj[key]=[v];&nbsp; &nbsp; &nbsp; &nbsp;}&nbsp; &nbsp; });&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; //下面把tmpObj按要求转化为数组&nbsp; &nbsp; for( var key in tmpObj){&nbsp; &nbsp; &nbsp; &nbsp; var tmpO={}&nbsp; &nbsp; &nbsp; &nbsp; tmpO["name"]=key;&nbsp; &nbsp; &nbsp; &nbsp; tmpO["nameIdx"]=[];&nbsp; &nbsp; &nbsp; &nbsp; for(var i=0;i<tmpObj[key].length;i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tmpO["nameIdx"].push({"site":tmpObj[key][i]});&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; newArr.push(tmpO);&nbsp; &nbsp; }&nbsp; &nbsp; return newArr;}可能不是楼上需要的,还是下面符合要求function s2a(str){&nbsp; &nbsp; var arr=[];&nbsp; &nbsp; var lastName='';&nbsp; &nbsp; str.split(',').forEach(s=>{&nbsp; &nbsp; &nbsp; &nbsp; const [name,site] = s.split('-');&nbsp; &nbsp; &nbsp; &nbsp; var cit=arr[arr.length-1];&nbsp; &nbsp; &nbsp; &nbsp; if(name!=lastName){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastName=name;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cit={name,'nameIdx':[]};&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arr.push(cit);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; cit['nameIdx'].push({site});&nbsp; &nbsp; &nbsp; &nbsp; });&nbsp; &nbsp; return arr;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript