我正在使用nodejs。
我遇到以下问题 -
有一个非常大的json对象,我希望将其映射到一个更小的对象,该对象具有我将在稍后使用的特定格式。
我想拥有可以在该大对象上使用的特定模式,每个模式都有自己的用途。我希望能够通过这些模式自定义结构,而不是其他地方。
我正在寻找一个可以帮助我的图书馆。
我通过npm发现了一个名为deep-map的东西。
我玩了一下它似乎回答了我的基本需求。
但我也需要做一些更复杂的映射。
简化示例 -
myArr
我需要查看type
仅针对x
等于router.route('/').get((request, response) => {
var promise = function() {
return new Promise(function(resolve, reject) {
let collection = []
Item.find({}, function (err, data) {
if (!err) {
data.forEach((item) => {
User.findOne({_id: item.seller}, function (err, res) {
if (!err) {
let parse = JSON.parse(JSON.stringify(item))
let filter
switch (item.category) {
case 'Relics & Antiques':
filter = 'antique'
break
case 'Coin & Currency':
filter = 'currency'
break
case 'Real Estate':
filter = 'realestate'
break
case 'Sports Memorabilia':
filter = 'sports'
break
case 'Fine Art':
filter = 'art'
break
case 'Jewellery':
filter = 'jewel'
break
case 'Automobile':
filter = 'auto'
break
}
parse.rep = res.rep
parse.sellerName = res.username
parse.sellerAvatar = res.avatarURI
parse.filter = filter
collection.push(parse)
}
})
})
resolve(collection);
}
})
});
};
promise().then(function(collection) {
return response.render('home/index', {item: collection})
});
})
的名称。
所以基本上我需要为每个循环和某些术语介于两者之间。
由于深层地图使用lodash / template我认为可能有一种方法可以使用lodash的功能来解决这个问题,但到目前为止我还没有找到如何将这两者(lodash + deep-map)结合起来解决更多问题复杂的映射。
我也对其他图书馆开放,可能会帮助我解决这个问题。
答案 0 :(得分:1)
Lodash有一个at method可以解决这个问题。它允许您指定field.subfieldThatsAnArray[1].subsubfield
之类的内容并获取值。
对于较少的"建立在你自己的"解决方案,这里有一些技术可能也很有趣:
那里还有其他一些,但JSONPath在空间中的其他地方使用,而SelectTransform看起来很酷。