如何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;
});