在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js數(shù)組操作

js數(shù)組操作

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;
}
2018年2月7日 21:17
編輯回答
絯孑氣

可以記錄上一個(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 })
})
2017年2月20日 01:15
編輯回答
紓惘
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;
}
2017年9月3日 01:11