基本上我需要的是从 json 中获取“项目”并重新分配它,并保持其他键不变: 第一种方法复制数据。 第二个似乎在性能方面很糟糕。 第三个是难以阅读和理解。 我使用 lodash。但如果不能以巧妙的方式完成,您可以建议我使用不同的库。
function a(name, json) {
return {
type: RECEIVE_DATA,
name,
items: _.get(json, 'data.items', []),
receivedAt: Date.now(),
...json,
};
}
function b(name, json) {
return {
..._.omit(json, 'data'),
type: RECEIVE_DATA,
name,
items: _.get(json, 'data.items', []),
receivedAt: Date.now(),
}
}
function c(name, json) {
return {
..._.transform(json, (result, value, key) =>{
if (key === 'data') {
result['items'] = value['items'];
} else {
result[key] = value;
}
}, {}),
type: RECEIVE_DATA,
name,
receivedAt: Date.now(),
}
}
最佳答案
使用参数destructuring获取 items
,和 rest properties收集其余参数:
const json = { another: [], data: { items: [1] } };
function a(name, { data, data: { items = [] }, ...jsonRest } = {}) {
return {
type: 'RECEIVE_DATA',
name,
items,
receivedAt: Date.now(),
...jsonRest
};
}
console.log(a('name', json));
您还可以使用箭头函数稍微缩短 action creator:
const a = (name, { data, data: { items = [] }, ...jsonRest } = {}) => ({
type: RECEIVE_DATA,
name,
items,
receivedAt: Date.now(),
...jsonRest
});
关于javascript - 在 Redux 操作对象中选择和省略一个函数(lodash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41248115/