在javascript中使用map创建子数组



我有一个JSON对象需要创建一个数组然后通过传递一个与元素匹配的值创建一个子数组

[{"MemberID":1416,"PMID":"34274008","Member":"Frey, Lewis"},
{"MemberID":1422,"PMID":"34274008","Member":"Welch, Brandon"},
{"MemberID":262,"PMID":"34272328","Member":"Mohanty, Bidyut"},
{"MemberID":1139,"PMID":"34272328""Member":"Howe, Philip"},
{"MemberID":1444,"PMID":"34272328","Member":"Long, David"},
{"MemberID":1665,"PMID":"34272328","Member":"Yoon, Je-Hyun"},
{"MemberID":101,"PMID":"34270968","Member":"Silvestri, Gerard"},
{"MemberID":101,"PMID":"34270965","Member":"Silvestri, Gerard"},
{"MemberID":121,"PMID":"34270729","Member":"Carpenter, Matthew"},
{"MemberID":1481"PMID":"34270729","Member":"Toll, Benjamin"},
{"MemberID":1765,"PMID":"34270729","Member":"Rojewski, Alana"}]

我失去了试图创建一个非常简单的地图函数。我需要创建一个子数组"Frey, Lewis"和布兰登·韦尔奇;如果PMID = 34274008,或者如果我映射PMID == 34272328,并获得一个包含4个其他名称的数组。我以前用过map和indexof,但现在我需要一个数组,我搜索的所有其他map都比我需要的复杂得多。我很抱歉问了这么一个基本的问题

我想你在找Array#filter.

Array#filter允许我们根据指定的条件返回子数组,在本例中为object.PMID = "34274008"

是这样的:

let subArr = data.filter(object => object.PMID === "34274008")

演示:

let data = [
{"MemberID":1416,"PMID":"34274008","Member":"Frey, Lewis"},
{"MemberID":1422,"PMID":"34274008","Member":"Welch, Brandon"},
{"MemberID":262,"PMID":"34272328","Member":"Mohanty, Bidyut"},
{"MemberID":1139,"PMID":"34272328","Member":"Howe, Philip"},
{"MemberID":1444,"PMID":"34272328","Member":"Long, David"},
{"MemberID":1665,"PMID":"34272328","Member":"Yoon, Je-Hyun"},
{"MemberID":101,"PMID":"34270968","Member":"Silvestri, Gerard"},
{"MemberID":101,"PMID":"34270965","Member":"Silvestri, Gerard"},
{"MemberID":121,"PMID":"34270729","Member":"Carpenter, Matthew"},
{"MemberID":1481,"PMID":"34270729","Member":"Toll, Benjamin"},
{"MemberID":1765,"PMID":"34270729","Member":"Rojewski, Alana"}
]
let subArr = data.filter(object => object.PMID === "34274008")
console.log(subArr)

你可以使用object来处理结果数据:

let arr = [
{ "MemberID": 1416, "PMID": "34274008", "Member": "Frey, Lewis" },
{ "MemberID": 1422, "PMID": "34274008", "Member": "Welch, Brandon" },
{ "MemberID": 262, "PMID": "34272328", "Member": "Mohanty, Bidyut" },
{ "MemberID": 1139, "PMID": "34272328", "Member": "Howe, Philip" },
{ "MemberID": 1444, "PMID": "34272328", "Member": "Long, David" },
{ "MemberID": 1665, "PMID": "34272328", "Member": "Yoon, Je-Hyun" },
{ "MemberID": 101, "PMID": "34270968", "Member": "Silvestri, Gerard" },
{ "MemberID": 101, "PMID": "34270965", "Member": "Silvestri, Gerard" },
{ "MemberID": 121, "PMID": "34270729", "Member": "Carpenter, Matthew" },
{ "MemberID": 1481, "PMID": "34270729", "Member": "Toll, Benjamin" },
{ "MemberID": 1765, "PMID": "34270729", "Member": "Rojewski, Alana" }
];

let resultObj = {};
arr.forEach((item, index) => {
if(resultObj[item['PMID']]) {
resultObj[item['PMID']].push(item);
}
else {
resultObj[item['PMID']] = [item];
}
})
console.log(resultObj)

或者简写为

let arr = [
{ "MemberID": 1416, "PMID": "34274008", "Member": "Frey, Lewis" },
{ "MemberID": 1422, "PMID": "34274008", "Member": "Welch, Brandon" },
{ "MemberID": 262, "PMID": "34272328", "Member": "Mohanty, Bidyut" },
{ "MemberID": 1139, "PMID": "34272328", "Member": "Howe, Philip" },
{ "MemberID": 1444, "PMID": "34272328", "Member": "Long, David" },
{ "MemberID": 1665, "PMID": "34272328", "Member": "Yoon, Je-Hyun" },
{ "MemberID": 101, "PMID": "34270968", "Member": "Silvestri, Gerard" },
{ "MemberID": 101, "PMID": "34270965", "Member": "Silvestri, Gerard" },
{ "MemberID": 121, "PMID": "34270729", "Member": "Carpenter, Matthew" },
{ "MemberID": 1481, "PMID": "34270729", "Member": "Toll, Benjamin" },
{ "MemberID": 1765, "PMID": "34270729", "Member": "Rojewski, Alana" }
];

let resultObj = {};
arr.forEach((item, index) => {
(resultObj[item['PMID']]) ? resultObj[item['PMID']].push(item) : resultObj[item['PMID']] = [item];
})

console.log(resultObj)

最新更新