javascript - 在 Redux 操作对象中选择和省略一个函数(lodash)

标签 javascript ecmascript-6 lodash

基本上我需要的是从 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/

相关文章:

javascript - Google map 中的标记可见性

c# - 从 ASPX 将多个 Eval 参数传递给 JavaScript 函数

javascript - 根据背景图像删除元素

javascript - AVA:为每个测试用例设置不同的超时

javascript - 如何通过特定对象键对数组中的值求和?

javascript - 使用 Lodash 按属性合并对象数组

javascript - 下划线/lodash : how to filter out empty properties?

javascript - 谷歌地图根据窗口调整大小设置不同的缩放比例

javascript - 如何重写这个双箭头函数

javascript - 一次使用两个或多个元素迭代数组