繁体   English   中英

动态传递键以映射到新对象

[英]Dynamically pass keys to map to new object

抱歉,标题令人迷惑,不知道如何用一个衬里来形容。

我具有以下实用程序功能:

module.exports.reduceObject = item => (({ price, suggested_price }) => ({ price, suggested_price }))(item);

它从键pricesuggest_price获取values ,并返回仅包含这些键和值的新对象。

然后,我可以打开一个像这样的对象:

inspect_link: 'steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198279893060A%item_id%D9567622191659726240',
price: '2.15',
suggested_price: '2.90',
is_featured: false,
float_value: '-1.00000',
pattern_info: 
 { paintindex: 0,
   paintseed: null,
   rarity: 3,
   quality: 4,
   paintwear: null },
is_mine: false,
tags: { type: 'Collectible', quality: 'Normal', rarity: 'High Grade' },
fraud_warnings: [],
stickers: null,
updated_at: 1501880427 }

简化版:

{"price":"2.59","suggested_price":"1.41"}

然后将其存储在MongoDB数据库中。

我希望能够在按键(如通过pricesuggested_price动态所以我可以在任何物体减少自身的缩小版,但我在努力寻找一个良好的实施。

我写了一些东西,例如:

module.exports.reduceObject = (item, keys) => (({ ...keys }) => ({ ...keys }))(item);

这是无效的,但老实说,我什至不知道该如何处理。

有人可以提供解决方案吗?

已经有功能强大的lodash库可以满足您的需求。 它具有pick函数,该函数返回一个由picked对象属性组成的对象:

let newItem = _.pick(item, ['price', 'suggested_price']);

我发现lodash的实现很难阅读。 如果您像我一样,这是一个更简单的实现:

function pick(object, keys) {
    const result = {};
    for (const key of keys) {
        if (object.hasOwnProperty(key)) {
            result[key] = object[key];
        }
    }
    return result;
}

根据您的使用,检查密钥是否实际上在源对象中可能很重要。 这以前使我不知所措。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM