【发布时间】:2021-08-13 03:28:32
【问题描述】:
我的问题是,是否有一种简单的方法可以返回包含所有“列”的 JSON 对象子集,而不是单独指定要返回的“列”。
特别是,我有一个转换为 JSON 的多列 csv 文件。下面的函数返回该对象的一个子集 - 如果满足某些条件(在这种情况下匹配“名称”),则只有两个“列”(作为另一个对象):
var firstSubArr = json.map(function(s) {
if (s.Name === RegName) {
return {
'Price': s.Price,
'Name': s.Name
}
}
}).filter(function(n) {
return n !== undefined
});
有没有一种更简单的方法可以从 json 对象返回“所有列”作为对象,而不是这样:
return {'Price':s.Price,'Name':s.Name}?
评论: 它只是一个简单的从csv转换后的JSON结构,例如:
`[ {名称:'Sydney',价格:123,类型:'xyz',等等 20 更多...}, 等等 ]`评论 2:是的过滤器可能是几个人建议的一个选项,但如果我的情况有点复杂,比如:
var fullPeriodArr= json.map( 函数 (s) { if(moment(s.Date,"YYYYMMDD").isSameOrBefore(currd) && moment(s.Date,"YYYYMMDD").isSameOrAfter(fullPeriodStart) && (s.Type==sid || s.Type==sid2) && s.Name===RegName){return [s.Price, s.Name] } }).filter(函数(n){ 返回 n!== 未定义 });解决方案:
所有 3 位受访者都提供了线索,谢谢!它只是“返回匹配条件的对象数组中的每个对象”,或者简单地说:
var firstSubArr= json.filter( s => (moment(s.Date,"YYYYMMDD").isSameOrBefore(currd) && moment(s.Date,"YYYYMMDD").isSameOrAfter(fullPeriodStart) && (s.Type==sid || s.Type== sid2) && s.Name===RegName) );。其中时间范围“从...到”是使用 moment.js lib 评估的,日期、类型和名称是对象键。
秘密布丁是复杂条件周围的圆括号 ( )。
Javascript 变得多么简洁:无需获取 .length 也无需使用“for”或“while”循环,无需“if...else”语句,或无需存储中间结果,也无需“return” .箭头取代了这一切!
然后您可以访问例如。价格“列”作为汇总计算的数字数组(例如值的总和):
var firstSubArrPrice=firstSubArr.map(t => t.Price );【问题讨论】:
-
您能否详细说明一下并添加告诉
json的样子。 -
你希望它只是纯js吗?
标签: javascript arrays json