js 字典按照规则转为为字典序列

有个字典,键值对是3的倍数,3N对键值对,例如下

var dic={
     brand_1=11,
    name_1=11,
     model_1=11,
     brand_2=22,
     name_2=22,
     model_2=22,
     brand_3=33,
     name_3=33,
     model_3=33
}

要转换成

var diclist=[
{ brand:11,name:11,model:11},
{ brand:22,name:22,model:22},
{ brand:33,name:33,model:33},
]

当然,每一组的{ brand:xx,name:xx,model:xx}, 要跟原来字典中key的最后那个数字对起来

有啥好的思路不?

如果对你有帮助的话,希望能够采纳支持一下!!!

 <script>
        var dic = {
            brand_1: 11,
            name_1: 11,
            model_1: 11,
            brand_2: 22,
            name_2: 22,
            model_2: 22,
            brand_3: 33,
            name_3: 33,
            model_3: 33
        };
        //转换函数
        function func(dic) {
            let res = [];
            //计算字典长度
            let size = Object.keys(dic).length;
            //初始化元素个数,如果字典长度为3N,那么初始化元素个数为N
            for (let i = 0; i < size / 3; i++) {
                res.push({});
            }
            //初始化元素索引值
            let i = 0;
            //累加指针
            let j = 0;
            //遍历字典
            for (let key in dic) {
                //获取字典的key值
                let k = key.substr(0, key.indexOf("_"));
                //赋值操作
                res[i][k] = dic[key];
                //累加+1
                j++;
                //每循环到3的倍数的时候,索引值自增1
                if (j % 3 == 0) i++;
            }
            //返回结果
            return res;
        }
        //打印输出结果
        console.log(func(dic))
    </script>

运行结果:

img

如果对你有帮助的话,希望能够采纳支持一下!!!

var dic = {
    brand_1 : 11, name_1 : 11, model_1 : 11,
    brand_2 : 22, name_2 : 22, model_2 : 22,
    brand_3 : 33, name_3 : 33, model_3 : 33
};
var result = [];
 //键值对是3的倍数,3N对键值对,所以可以先确定列表新增的字典个数
let length = Object.keys(dic).length;
for(let i = 0 ;i< length/3; ++i){
    result.push({});
}
for (var key in dic){
 //let i = key.charAt(key.length-1)-1; //原来只考虑个位数字
 let i = parseInt(key.substr(key.indexOf("_")+1))//这个截取多位数字
 let k = key.substr(0,key.indexOf("_"))// 提取key的前部分
 result[i-1][k] = dic[key];//i-1:是因为保存的元素是从下标0开始
}
console.log(result)

img

var dic = {
    brand_1 : 11, name_1 : 11, model_1 : 11,
    brand_2 : 22, name_2 : 22, model_2 : 22,
    brand_3 : 33, name_3 : 33, model_3 : 33
};
for (var key in dic){
 console.log(typeof key);
}

img

抱歉,这个是想在我自己上面回答下证明可以用substr的原因,可惜评论错位置了

var dic = {
    brand_1 : 11, name_1 : 11, model_1 : 11,
    brand_2 : 22, name_2 : 22, model_2 : 22,
    brand_3 : 33, name_3 : 33, model_3 : 33
};
for (var key in dic){
 console.log(typeof key);
}

img

var dic = {
brand_1 : 11, name_1 : 11, model_1 : 11,
brand_2 : 22, name_2 : 22, model_2 : 22,
brand_3 : 33, name_3 : 33, model_3 : 33
};
for (var key in dic){
console.log(typeof key);
}