Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何grep这个Javascript对象数组?_Javascript_Jquery - Fatal编程技术网

如何grep这个Javascript对象数组?

如何grep这个Javascript对象数组?,javascript,jquery,Javascript,Jquery,我有以下对象结构: var mapData = { Summary: { ReportName: 'Month End Report' }, NortheastRegion: { Property1: 123, RegionName: 'Northeast' }, SoutheastRegion: { Property1: 456, RegionName: 'Southeast'

我有以下对象结构:

var mapData = 
{
   Summary:
   {
      ReportName: 'Month End Report'
   },
   NortheastRegion:
   {
      Property1: 123,
      RegionName: 'Northeast'
   },
   SoutheastRegion:
   {
      Property1: 456,
      RegionName: 'Southeast'   
   },   
}
我想写一个grep函数,返回一个区域名数组。以下函数不返回任何值:

var regions = $.grep(mapData, function(n,i)
{
   return n.RegionName;
});

我在这里遗漏了什么?

这是一个对象,不是数组。根据,如果mapData是一个数组,则上面的示例可以运行

您可以将其用于此类型的对象:

var regions = _.mapValues(mapData, function(o) {
  return o.RegionName;
});
ES6:

如中所述,应该将数组作为要搜索的数据传递,但mapData是一个对象。但是,您可以使用循环遍历对象键,但是您必须针对您的情况使用特定的函数,如:

变量映射数据= { 总结: { 报告名称:“月末报告” }, 东北地区: { 房地产1:123, 地区名称:“东北” }, 东南地区: { 物业1:456, 地区名称:“东南” }, }; var keys=Object.keysmapData, 结果=[]; 控制台日志键; keys.forEachfunctionkey{ var region=mapData[key].RegionName; 如果区域&&result.indexOfregion==-1{ 结果:pushregion; } }; console.logresult; //简短版本-基于@KooiInc-answer console.log Object.keysmapData.mapm=>mapData[m].RegionName.filterm=>m ; $.grep用于筛选数组。您的结构不是数组。$。grep也只是用于过滤,但您所说的过滤忽略了摘要,而映射只获取区域名称

相反,您可以使用

Object.key和push:

Object.keys、筛选器和映射:

A用于环路和推送:

…可能是其他的。

$。grep用于数组。mapData是一个对象。您可以尝试对mapData的键使用map/filter,例如:

变量映射数据= { 总结: { 报告名称:“月末报告” }, 东北地区: { 房地产1:123, 地区名称:“东北” }, 东南地区: { 物业1:456, 地区名称:“东南” }, }; var regionNames=Object.keysmapData .map函数键{返回mapData[key].RegionName;} .filter函数名{return name;}; console.dirregionNames; //es2105 var regionNames2=Object.keysmapData .map key=>mapData[key].RegionName .filter name=>name; console.dirregionNames2 只要把$.grep转到$.map,你就可以走了

var regions = $.map(mapData, function(n,i)
{
   return n.RegionName;
});

我不确定,但在return语句中应该是n.RegionName吗?这里没有JSON。JSON是用于数据交换的文本表示法。如果您处理的是JavaScript源代码,而不是字符串,那么就不是JSON。它也不是数组。为什么不编写自己的函数呢?我想您需要的是$.map,而不是$.grep。@oboshto:谢谢!固定的
var regions = [];
Object.keys(mapData).forEach(function(key) {
    var entry = mapData[key];
    if (entry && entry.RegionName) {
        regions.push(entry.RegionName);
    }
});
var regions = Object.keys(mapData)
    .filter(function(key) {
        return !!mapData[key].RegionName;
    })
    .map(function(key) {
        return mapData[key].RegionName;
    });
var regions = [];
for (var key in mapData) {
     if (mapData.hasOwnProperty(key)) {
         var entry = mapData[key];
         if (entry && entry.RegionName) {
             regions.push(entry.RegionName);
         }
     }
}
var regions = $.map(mapData, function(n,i)
{
   return n.RegionName;
});