I am trying to get the values and keys in nested arrays by the key in "data" matching a comparison array's values
data =
[
[
"SB County Land Use Boundaries",
{
"FID": 815,
"Handle": "B0D",
"LAND_USE": "CITY",
"GEN_CLASS": "No Jurisdiction",
"GEN_TYPE": "No Jurisdiction",
"LU_Descrip": "Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",
"LU_UnPerAc": 0,
"Join_ID": 488,
"Shape__Area": 69469732.26171875,
"Shape__Length": 86576.24883405081
}
],
[
"SB County Zoning",
{
"FID": 1149,
"ET_ID": 491,
"Handle": "1922",
"ZONING": "CITY",
"GEN_CLASS": "No Jurisdiction",
"GEN_TYPE": "No Jurisdiction",
"ZonDescrip": "Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",
"ZonUnPerAc": 0,
"Acres": 11648,
"test_ID": 488,
"ET_X": 6044294.06156,
"ET_Y": 1975709.1194,
"Join_ID": 492,
"Shape__Area": 69469789.37890625,
"Shape__Length": 86576.11064503175
}
],
[
"Property Parcels",
{
"FID": 15444,
"APN": "037-400-008",
"LAYER": "Ground",
"Situs1": "825 STATE ST",
"Acreage": 0.18,
"AgPres": " ",
"Shape__Area": 1072.97265625,
"Shape__Length": 154.93547123003384
}
],
[
"SB City Zoning",
{
"OBJECTID": 58,
"ZONE": "C-2",
"PUD": "N",
"S_D_1": "N",
"S_D_2": "N",
"S_D_3": "N",
"C_X": "N",
"P_D": "N",
"S_H": "N",
"ACRES": 0.816,
"ZONE_OTHER": "C-2",
"Zone_1": "C-G",
"Zone_Descr": "Commercial General",
"Zone_old": "C-2",
"Zone_old_D": "Commercial",
"ZoneOther_": "C-2",
"ZoneOther": "C-G",
"ZONEDESG": " ",
"SP6": " ",
"Shape__Area": 14444769.935546875,
"Shape__Length": 39069.464156507274
}
],
[
"SB City Land Use Boundaries",
{
"OBJECTID": 293,
"LUCode_Concept": "C-MHDR",
"ORIG_FID": 3,
"Area": 232293606.192763,
"Acres": 37.03282927,
"LUDesign_Concept": "Commercial-Medium High Density Residential",
"Shape__Area": 1613146.2373046875,
"Shape__Length": 12139.290187575602
}
]
]
Comparison array is
fields = ["APN", "Situs1", "Acreage", "ZONING", "ZonDescr", "ZonDescrip", "LAND_USE", "LU_Descrip"]
From here I want to return the title of each array and the corresponding key value pair that match values in "fields" like so
results = [
[
"SB County Land Use Boundaries",
{
"LAND_USE": "CITY",
"LU_Descrip": "Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",
}
],
[
"SB County Zoning",
{
"ZONING": "CITY",
"ZonDescrip": "Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",
}
],
[
"Property Parcels",
{
"APN": "037-400-008",
"Situs1": "825 STATE ST",
"Acreage": 0.18
}
],
[
"SB City Zoning",
{
"Zone_Descr": "Commercial General"
}
]
]
I have tried the following
for(var i=0;i<data.length;i ) {
var results = data[i].filter((d: any) => d.fields.every((c: string) => fields.includes(c)));
console.log(results)
}
But comes up undefined. Any help would be really appreciated. Thanks in advance!
CodePudding user response:
Take the entries of the object and filter them by whether the key is included in the comparison array. Then you can turn it back into an object with Object.fromEntries
.
This will transform the objects as needed, which can be done with .map
, but you also need to remove the subarrays that have only an empty object remaining, with .filter
.
const data=[["SB County Land Use Boundaries",{FID:815,Handle:"B0D",LAND_USE:"CITY",GEN_CLASS:"No Jurisdiction",GEN_TYPE:"No Jurisdiction",LU_Descrip:"Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",LU_UnPerAc:0,Join_ID:488,Shape__Area:69469732.26171875,Shape__Length:86576.24883405081}],["SB County Zoning",{FID:1149,ET_ID:491,Handle:"1922",ZONING:"CITY",GEN_CLASS:"No Jurisdiction",GEN_TYPE:"No Jurisdiction",ZonDescrip:"Incorporated City (No County Jurisdiction): Santa Barbara, Carpinteria, Lompoc, Buellton, Solvang, Santa Maria, Guadalupe, Goleta",ZonUnPerAc:0,Acres:11648,test_ID:488,ET_X:6044294.06156,ET_Y:1975709.1194,Join_ID:492,Shape__Area:69469789.37890625,Shape__Length:86576.11064503175}],["Property Parcels",{FID:15444,APN:"037-400-008",LAYER:"Ground",Situs1:"825 STATE ST",Acreage:.18,AgPres:" ",Shape__Area:1072.97265625,Shape__Length:154.93547123003384}],["SB City Zoning",{OBJECTID:58,ZONE:"C-2",PUD:"N",S_D_1:"N",S_D_2:"N",S_D_3:"N",C_X:"N",P_D:"N",S_H:"N",ACRES:.816,ZONE_OTHER:"C-2",Zone_1:"C-G",Zone_Descr:"Commercial General",Zone_old:"C-2",Zone_old_D:"Commercial",ZoneOther_:"C-2",ZoneOther:"C-G",ZONEDESG:" ",SP6:" ",Shape__Area:14444769.935546875,Shape__Length:39069.464156507274}],["SB City Land Use Boundaries",{OBJECTID:293,LUCode_Concept:"C-MHDR",ORIG_FID:3,Area:232293606.192763,Acres:37.03282927,LUDesign_Concept:"Commercial-Medium High Density Residential",Shape__Area:1613146.2373046875,Shape__Length:12139.290187575602}]],fields=["APN","Situs1","Acreage","ZONING","ZonDescr","ZonDescrip","LAND_USE","LU_Descrip"];
const output = data
.map(([name, obj]) => [name, Object.fromEntries(
Object.entries(obj)
.filter(([key]) => fields.includes(key))
)])
.filter(([, obj]) => Object.keys(obj).length);
console.log(output);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>