【问题标题】:Keep Object as Object after filtering过滤后保持对象为对象
【发布时间】:2019-04-19 16:55:15
【问题描述】:

这是我的数据结构

const data = Immutable.fromJS({
        1: {
            foo: 'bar'
            ...
        },
        2: {
            foo: 'foo'
            ...
        },
        3: {
            foo: 'foobar'
            ...
        },
    },
});

我想过滤数据,我需要我的 filteredData 是完全相同的类型 - Immutable Object。当我跑步时

const filtered = data.get('data').valueSeq().filter(obj => {
    ...
    return obj;
});

我知道了[{}, {}, {}, ...]

我需要它是这样的(作为输入数据){1: {...}, 2: {...}, 3: {...}}。什么是正确的 filter 函数,因此返回类型已经是 Map 而不是 Array。或者没有这样的东西。

【问题讨论】:

    标签: javascript immutable.js


    【解决方案1】:

    过滤后您的对象仍然是 ImmutableObject(参见示例)

    const data = Immutable.fromJS({
        data: {
            1: {
                foo: 'bar'
            },
            2: {
                foo: 'foo'
            },
            3: {
                foo: 'foobar'
            },
        },
        kittens: {}
    });
    
    const res = data.get('data').filter(obj=>obj.get('foo') === 'bar');
    console.log(res);
    
    //still immutable object
    console.log(res.get('1'));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>

    【讨论】:

    【解决方案2】:

    我的主张保留原始数据结构:

    const data = Immutable.fromJS({
        data: {
            1: {
                foo: 'bar'
            },
            2: {
                foo: 'foo'
            },
            3: {
                foo: 'foobar'
            },
        },
    });
    
    const filtered = data.updateIn(
      ['data'],
      v => v.filter(obj=>obj.get('foo') === 'bar'));
      
    console.log(filtered);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>

    【讨论】:

      【解决方案3】:

      您需要删除.valueSeq()。这就是将对象转换为数组的原因

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-06
        • 1970-01-01
        • 2019-12-16
        • 1970-01-01
        • 2022-08-03
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        相关资源
        最近更新 更多