为了账号安全,请及时绑定邮箱和手机立即绑定

js数组操作

js数组操作

叮当猫咪 2019-03-22 19:15:27
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"是字段名称。
查看完整描述

3 回答

?
慕姐8265434

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 })

})


查看完整回答
反对 回复 2019-04-04
?
SMILET

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;

}


查看完整回答
反对 回复 2019-04-04
?
冉冉说

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;

}


查看完整回答
反对 回复 2019-04-04
  • 3 回答
  • 0 关注
  • 427 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信