3 回答
TA贡献1813条经验 获得超2个赞
可以记录上一个 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 })
})
TA贡献1796条经验 获得超4个赞
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;
}
TA贡献1877条经验 获得超1个赞
上面几个处理都不完备,存在如果输入数据不是排序则结果不正确的可能。
下面的处理其实也有一些可能的问题(数据可能不是期望的顺序),但对输入数据可以得出完备的结果
function fn(str){
var tmpObj={};
var newArr=[];
var arr = str.split(",");
arr.map(function(item){ //arr输出到tmpObj对象
var itemA=item.split("-");
var key=itemA[0];
var v=itemA[1];
if(tmpObj[key]){ //判断一个键值对象是否存在,不存在就初始化,否则就添加新值
tmpObj[key].push(v);
}else{
tmpObj[key]=[v];
}
});
//下面把tmpObj按要求转化为数组
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;
}
添加回答
举报