gpt4 book ai didi

javascript - 使用 Javascript map() 函数返回 JSON 对象的子集

转载 作者:行者123 更新时间:2023-11-30 07:30:39 36 4
gpt4 key购买 nike

我的问题是,是否有一种简单的方法可以返回包含所有“列”的 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结构,eg:

`[    {Name:'Sydney', Price:123, Type:'xyz', etc. 20 more... },    etc.    ]`

评论 2:是的,过滤器可能是一个选项,正如一些人所建议的,但如果我的情况有点复杂,比如:

    var fullPeriodArr= json.map( function (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( function (n) {     return n!== undefined    });

解决方案:

所有 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 库评估的,日期、类型和名称是对象键。

secret 布丁是复杂条件周围的圆括号 ( )。

Javascript 变得多么简洁:无需获取 .length 也无需使用“for”或“while”循环,无需“if...else”语句,无需存储中间结果,也无需“return” .箭头取代了这一切!

然后你可以访问例如。价格“列”作为汇总计算的数字数组(例如,值的总和):

var firstSubArrPrice=firstSubArr.map(t => t.Price );

最佳答案

摆脱 map() 并只使用 filter(),您将在结果中得到原始对象

var firstSubArr = json.filter(function(s) {
return s.Name === RegName
});

关于javascript - 使用 Javascript map() 函数返回 JSON 对象的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613155/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com