从键创建js对象属性

use*_*035 3 javascript arrays reduce

嗨,我试图使用reduce方法从对象数组创建一个对象映射,但没有找到添加2个属性作为键的方法.假设我有一些像这样的对象 -

 const students = [
    {
      name: "sam",
      age: 26,
    },
    {
      name: 'john",
      age: 30,
    }
    ]
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个类似的地图

{
  sam_26:{
      name: "sam",
      age: 26,
    }
 }
Run Code Online (Sandbox Code Playgroud)

我的reduce函数代码:

students.reduce((obj, student) => {
    `${obj[student.name]}_${obj[student.age]}` = student;
    return obj;
  }, {});
Run Code Online (Sandbox Code Playgroud)

这没用.任何指针都会有所帮助..谢谢!

Ori*_*ori 5

使用从student对象获取的值创建密钥.使用以下命令将电流分配studentobj(累加器)key:

const students = [{
    name: "sam",
    age: 26,
  },
  {
    name: "john",
    age: 30,
  }
];

const result = students.reduce((obj, student) => {
  const key = `${student.name}_${student.age}`;
  obj[key] = student;
  return obj;
}, {});

console.log(result);
Run Code Online (Sandbox Code Playgroud)

使用回调创建密钥的通用方法:

const keyBy = (arr, cb) => 
  arr.reduce((r, o) => {
    const key = cb(o);
    r[key] = o;
    return r;
  }, {});
  
const students = [{"name":"sam","age":26},{"name":"john","age":30}];  

const result = keyBy(students, (o) => `${o.name}_${o.age}`);

console.log(result);
Run Code Online (Sandbox Code Playgroud)