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

标签 javascript arrays json

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

相关文章:

javascript - 使用 js 第二次点击不弹出表单

python - 如何在 python 中打印出 calendar.month_name 数组?

c++ - Qt 解析一个 json 响应

javascript - JSON 的智能感知帮助?

javascript - Youtube API显示随机视频和缩略图

javascript - 了解 .length 属性

javascript - 命令处理程序中的 Discord.js 音乐机器人

php - 在php中检查数组是否为空

c++ - 将 char 数组转换为 int 数组

php - SQL查询只返回一行结果