从javascript中的列表创建具有相同键的对象

时间:2020-10-22 10:49:09

标签: javascript

如何转换为:

[{skill_1: "java", level_1: 5, skill_2: "js", level_2: 2, skill_3: "docker", level_3: 2}]

收件人:

[{name : "java", level:5} , {name : "js", level:2}, {name : "docker", level:2}]

2 个答案:

答案 0 :(得分:0)

Ciao,您可以使用for从对象中获取skilllevel,例如:

let input = [{skill_1: "java", level_1: 5, skill_2: "js", level_2: 2, skill_3: "docker", level_3: 2}];
let result = [];
let values = Object.values(input)[0];
for (let i = 1; i <= 3; i++) {
  let obj_res = {};
  obj_res.name = values["skill_" + i];
  obj_res.level = values["level_" + i];
  result.push(obj_res);
}
console.log(result);

注意:我认为最后一个level应该是level_3,而不是level_2

答案 1 :(得分:0)

let a = [{skill_1: "java", level_1: 5, skill_2: "js", level_2: 2, skill_3: "docker", level_3: 2}];

let res = [];
// iterate object
for (const [k, v] of Object.entries(a[0])){
    // string to array
    let ka = k.split("_");
    // check if key already exists in res
    if(res[parseInt(ka[1])-1]){
        // exists
        // assign to dictionary
        res[parseInt(ka[1])-1][ka[0]] = v;
    }else{
        // not exit
        // create dictionary
        res[parseInt(ka[1])-1] = {[ka[0]]: v};
    }
}

console.log(res);
// [
//   { skill: 'java', level: 5 },
//   { skill: 'js', level: 2 },
//   { skill: 'docker', level: 2 }
// ]

您好,欢迎来到SO,如果您正在寻找初学者的资源,建议您看看ArrayObject