Создание свойства объекта js из ключей.
Привет я пытаюсь создать карту объектов из массива объектов, используя метод Reduce, но не нашел способ добавить 2 свойства в качестве ключа. Допустим, у меня есть массив объектов, таких как -
const students = [
{
name: "sam",
age: 26,
},
{
name: 'john",
age: 30,
}
]
я пытаюсь создать карту как
{
sam_26:{
name: "sam",
age: 26,
}
}
мой код для функции понижения:
students.reduce((obj, student) => {
`${obj[student.name]}_${obj[student.age]}` = student;
return obj;
}, {});
это не сработало. любые указатели будут полезны.. спасибо!
4 ответа
Создайте ключ со значениями, взятыми из student
объект. Назначить текущий student
к obj
(аккумулятор) с помощью 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);
Общий подход, который использует обратный вызов для создания ключа:
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);
Вы не можете назначить левой стороне с литералом шаблона как это. Попробуйте сначала определить свойство, а затем назначить его объекту:
const students = [ { name: "sam", age: 26, }, { name: 'john', age: 30, } ];
const finalObj = students.reduce((obj, student) => {
const prop = `${student.name}_${student.age}`;
obj[prop] = student;
return obj;
}, {});
console.log(finalObj);
Надеюсь, этот фрагмент будет полезен
const students = [{
name: "sam",
age: 26,
},
{
name: "john",
age: 30,
}
]
//Using reduce function to add value to the accumalator
var x = students.reduce(function(acc, curr, index) {
// Here acc is the object which is passed as argument,
//In this object checking if it has a key like sam_26 & so on
if (!acc.hasOwnProperty([curr['name'] + '_' + curr['age']])) {
//if not then add the key and add relevant vakues to it
acc[curr.name + '_' + curr.age] = {
name: curr.name,
age: curr.age
}
}
return acc;
}, {});
console.log(x)
Я попробовал этот скрипт, и он работал. Просто создайте имя переменной на основе имени ученика и возраста, а затем присвойте объекту
students.reduce((obj, student) => {
var name = student.name + '-' + student.age;
obj[name] = student;
return obj;
}, {});