规则对象如何转数组?

form

{
    a1: 'a1',
    b1: 'b1',
    c1: 'c1',
    d1: 'd1',
    a2: 'a2',
    b2: 'b2',
    c3: 'c3'
}

to

[
    ['a1', 'b1', 'c1', 'd1'],
    ['a2', 'b2'],
    ['c3']
]

js怎么实现?
其实想要的就是把key后面的数字相同的项目的值提取出来放进一个数组,再把数组放进一个大数组里。
例如a1b1,key的数字部分均为1,则提取a1b1的值分别为a1b1,放进一个数组中,再把这个数组放进一个大数组,后面项目类推,最后得到一个两层嵌套数组。

阅读 3.6k
4 个回答

其实你的问题问得不清楚,数据也很特殊,真的不知道你要写什么逻辑。
如果只实现一个单一逻辑,那很简单:

function o2arr(obj, n) { //obj:要转换的对象,n:对象里数字对应 ,这儿很有局限,只针对你题目
    var result = [];
    for(var j = 1; j <= n; j++) {
        var arr = [];
        for(var i in obj) { 
            if(i.indexOf(j) != -1) {arr.push(obj[i])}
        }    
        result.push(arr);
    }
    return result;
}
o2arr(o,3)  //o为你题中的对象,打印出结果就可以实现你提问的数组了

但是要通用的话,这样还差很多,需要知道你要啥子逻辑,而不是单一的给个代码转换。

那就遍历对象属性,规矩你的规则(你这里应该就是按照数字来分组了)处理。

  var obj = {
    b4: 'b4',
    a1: 'a1',
    b1: 'b1',
    c1: 'c1',
    d1: 'd1',
    a2: 'a2',
    b2: 'b2',
    c3: 'c3',
    e1: 'e1',
    d2: 'd2',
    h3: 'h3',
    h4: 'h4',
    h1: 'h1'
}

var temp;
var index = 1;
var hash = {};
var result = Object.keys(obj).reduce(function(res, next) {
    temp ? '' : (temp = next.match(/\d+/)[0], hash['temp' + temp] = index);
    var matchNum = next.match(/\d+/)[0];
    if (temp !== matchNum) {
        hash['temp' + matchNum] ? '' : hash['temp' + matchNum] = ++index;
        temp = matchNum;
    }
    res[hash['temp' + matchNum] - 1] ? res[hash['temp' + matchNum] - 1].push(obj[next]) : res.push([obj[next]]);
    return res
}, [])
console.log(JSON.stringify(result))

只针对你题目

obj={
    a1: 'a1',
    b1: 'b1',
    c1: 'c1',
    d1: 'd1',
    a2: 'a2',
    b2: 'b2',
    c3: 'c3'
}
arr=[];
for (var c in obj){
    if(!arr[c[1]]){arr[c[1]]=[];}
    arr[c[1]].push(obj[c]);
}
console.log(arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题