【问题标题】:From array to object convert to obtain object pattern从数组到对象转换得到对象模式
【发布时间】:2020-07-31 08:47:42
【问题描述】:

我有一个对象数组,我必须从中选择一个数组对象;并将其转换为模式。

[ 
    executed:[
    {_id: "5f23d394cd 480e300", field: "name", value: "Jolly", operator: "equal"},
    {_id: "5f30d39f4cd8d0e301", field: "status", value: "EXPIRED", operator: "equal"},
    {_id: "5f230d39001480e302", field: "grp", value: "874-3-11-4-56", operator: "equal"},
    {_id: "59f4cd8d001480e303", field: "grp", value: "873-5-12-4-77", operator: "equal"}
    ],
    created_at: "2020-07-30T18:11:05.992Z"
    name: "Kind Find"
    _id: "1f230d39f4cd8d441480e2dd"
]

我有上面的模式,我正在尝试将其转换为以下模式..

{
    "grp": ["874-3-11-4-56", "873-5-12-4-77"],
    "name": "Jolly",
    "status": "EXPIRED"
}

所以executed 中的数据只是我想挑选并将其转换为上述对象。 现在问题是数据是动态的,fieldvalue 每次都会不同。但它只需要使用这两个字段。

另外,grp 字段始终是一个数组....(如果有一个 grp,那么它也应该是一个数组)

我被这个关键的东西困住了,对 JS 不熟悉(是 python 开发者:D),用 React 探索这些领域。 请帮我解决这个问题。

非常感谢!

编辑:只是另一个例子

例子-

[ 
        executed:[
        {_id: "5f23d394cd 480e300", field: "name", value: "Jolly", operator: "equal"},
        {_id: "5f30d39f4cd8d0e301", field: "status", value: "EXPIRED", operator: "equal"},
        {_id: "59f4cd8d001480e303", field: "grp", value: "873-5-12-4-77", operator: "equal"}
        ],
        created_at: "2020-07-30T18:11:05.992Z"
        name: "Kind Find"
        _id: "1f230d39f4cd8d441480e2dd"
    ]

输出

  {
        "grp": ["873-5-12-4-77"],
        "name": "Jolly",
        "status": "EXPIRED"
    }

【问题讨论】:

  • 你所说的“字段”是什么意思,每次都会不同?您是否总是尝试将“grp”分组到一个数组中,或者这会改变吗?
  • field: "name" 可以出现两次吗?如果是,它应该是输出中的一个数组吗?
  • 是的,如果字段出现两次,那么它应该得到一个数组,(默认情况下grp无论是一次还是两次都是一个数组。)

标签: javascript arrays json reactjs


【解决方案1】:

你可以这样做:

const data = { 
    executed:[
    {_id: "5f23d394cd 480e300", field: "name", value: "Jolly", operator: "equal"},
    {_id: "5f30d39f4cd8d0e301", field: "status", value: "EXPIRED", operator: "equal"},
    {_id: "5f230d39001480e302", field: "grp", value: "874-3-11-4-56", operator: "equal"},
    {_id: "59f4cd8d001480e303", field: "grp", value: "873-5-12-4-77", operator: "equal"}
    ],
    created_at: "2020-07-30T18:11:05.992Z",
    name: "Kind Find",
    _id: "1f230d39f4cd8d441480e2dd"
}

console.log(
    data.executed.reduce((carry, current) => {
        if (current.field === 'grp') {
            carry[current.field] = (carry[current.field] || []).concat(current.value);
        } else {
            carry[current.field] = carry[current.field] ? [carry[current.field], current.value] : current.value;
        }
        return carry;
    }, {})
);

【讨论】:

  • [carry[current.field], current.value] 将在每次迭代中创建嵌套数组,如果有超过 2 个项目具有相同的field
猜你喜欢
  • 2020-11-20
  • 2018-12-13
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
相关资源
最近更新 更多