对于令人困惑的标题感到抱歉,我不确定如何在单行中描述这一点。
我有以下效用函数:
module.exports.reduceObject = item => (({ price, suggested_price }) => ({ price, suggested_price }))(item);
从values
和price
获取suggest_price
并返回一个只包含这些键和值的新对象。
然后我可以像这样转动一个对象:
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数据库中。
我希望能够动态传递密钥(例如price
,suggested_price
,这样我就可以将任何对象缩减为自身的较小版本,但我可以我正在努力寻找一个好的实施方案。
我写了一些如:
module.exports.reduceObject = (item, keys) => (({ ...keys }) => ({ ...keys }))(item);
这不是有效的,但我真的不知道如何处理这个问题。
任何人都可以提供解决方案吗?
答案 0 :(得分:1)
已经有一个强大的lodash库可以满足您的需求。它具有pick
函数,该函数返回由拾取的对象属性组成的对象:
let newItem = _.pick(item, ['price', 'suggested_price']);
答案 1 :(得分:1)
我发现lodash的实现难以阅读。如果你像我一样,这里有一个更简单的实现:
function pick(object, keys) {
const result = {};
for (const key of keys) {
if (object.hasOwnProperty(key)) {
result[key] = object[key];
}
}
return result;
}
根据您的使用情况,检查密钥是否实际位于源对象中非常重要。这让我失望了。