从另一个对象的内部属性向 return 一个对象写入一个纯函数?
Write a pure function to return one object from inner properties another objects?
做一些数据转换练习并卡住了。我有一个对象,我想将其转换为如下所述的 from (starting)
-> to (expected ending)
输出。我正在尝试使用 Array.reduce
和 Object.assign
来保持输出的纯净。但我无法让它正常工作。
/**
* from (starting): {topic: {id: 2}, products: {id: 3}}
* to (expected ending): {topic: 2, products: 3}
*/
const starting = {topic: {id: 2}, products: {id: 3}};
const ending = Object.keys(starting).reduce((p, key) => {
if(!p[key]) p[key] = key;
return Object.assign(p[key], starting[key].id);
}, {})
我认为 reduce()
不是正确的工具。
尝试使用 forEach()
遍历 starting
的键:
const starting = {topic: {id: 2}, products: {id: 3}};
const ending = {};
Object.keys(starting).forEach(p => ending[p] = starting[p].id);
console.log(ending);
你可以使用reduce
,只要记住每次迭代后return起始对象。
function convert(start) {
return Object.keys(starting).reduce((o, key) => {
o[key] = start[key].id;
return o;
}, {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));
试试这个:
var starting = {topic: {id: 2}, products: {id: 3}};
var ending = Object.keys(starting).reduce((p, key) => {
p[key] = starting[key].id;
return p;
}, {})
这将创建一个新对象,因此不需要 Object.assign
等来保持输出的纯净。
纯函数解决方案需要您在每次迭代时return一个新对象:
function convert(start) {
return Object.keys(starting).reduce((o, key) =>
Object.assign({}, {
[key]: start[key].id
}, o), {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));
使用对象传播使它更干净一些:
function convert(start) {
return Object.keys(starting).reduce((o, key) => ({
...o,
[key]: start[key].id
}), {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));
做一些数据转换练习并卡住了。我有一个对象,我想将其转换为如下所述的 from (starting)
-> to (expected ending)
输出。我正在尝试使用 Array.reduce
和 Object.assign
来保持输出的纯净。但我无法让它正常工作。
/**
* from (starting): {topic: {id: 2}, products: {id: 3}}
* to (expected ending): {topic: 2, products: 3}
*/
const starting = {topic: {id: 2}, products: {id: 3}};
const ending = Object.keys(starting).reduce((p, key) => {
if(!p[key]) p[key] = key;
return Object.assign(p[key], starting[key].id);
}, {})
我认为 reduce()
不是正确的工具。
尝试使用 forEach()
遍历 starting
的键:
const starting = {topic: {id: 2}, products: {id: 3}};
const ending = {};
Object.keys(starting).forEach(p => ending[p] = starting[p].id);
console.log(ending);
你可以使用reduce
,只要记住每次迭代后return起始对象。
function convert(start) {
return Object.keys(starting).reduce((o, key) => {
o[key] = start[key].id;
return o;
}, {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));
试试这个:
var starting = {topic: {id: 2}, products: {id: 3}};
var ending = Object.keys(starting).reduce((p, key) => {
p[key] = starting[key].id;
return p;
}, {})
这将创建一个新对象,因此不需要 Object.assign
等来保持输出的纯净。
纯函数解决方案需要您在每次迭代时return一个新对象:
function convert(start) {
return Object.keys(starting).reduce((o, key) =>
Object.assign({}, {
[key]: start[key].id
}, o), {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));
使用对象传播使它更干净一些:
function convert(start) {
return Object.keys(starting).reduce((o, key) => ({
...o,
[key]: start[key].id
}), {});
}
const starting = {topic: {id: 2}, products: {id: 3}};
console.log(convert(starting));