w2olves
w2olves

Reputation: 2329

Filter properties from an array based on another array

I have an array of objects like this:

var bridges = {"countyCd:15
createdDate:"0001-01-01T00:00:00"
createdUserId:0
createdUserIdZ:null
createdUserName:null
description:"SR [email protected] RR COMP OF IND"
districtId:null
encryptedId1:null
encryptedId2:null
isDirty:false
modelState:null
nbiNumber:10
routeNbr:"1"
routeTypeCd:"SR"
transactionType:null
updatedDate:"0001-01-01T00:00:00"
updatedUserId:0
updatedUserIdZ:null
updatedUserName:null", [...]....}

I have another array like this

[countyCd, nbiNumber]

How can create another array keeping just two properties so it becomes like

bridges = {"countyCd:15 nbiNumber:10" , [...]....}

Basically, I am looking for a way to create a function that takes a data array and a filter array as parameters and filters the data array based on the filter array.

Any pointers to this will be much appreciated.

Upvotes: 0

Views: 65

Answers (2)

bds
bds

Reputation: 276

Say you have an array of bridges, call it bA:

var bA = []; //bridges array
var nbiA = []; // nbia array with countyCd
var newA = []; // new array
bA.forEach(function(element, index, array){
    var newEntry = {
        'countyCd':element.countyCd,
        'nbiNumber':nbiA.find(function(nbi){
            return nbi[countyCd] == element.countyCd;
        }).nbiNumber
    };
    newA.push(newEntry);
});
//do whatever you want with the newA array

Upvotes: 1

Rob M.
Rob M.

Reputation: 36511

One solution would be to map over each record and reduce your filter array into an object containing the target proprties:

var bridges = [{
    countyCd:15,
    createdDate:"0001-01-01T00:00:00",
    createdUserId:0,
    createdUserIdZ:null,
    createdUserName:null,
    description:"SR [email protected] RR COMP OF IND",
    districtId:null,
    encryptedId1:null,
    encryptedId2:null,
    isDirty:false,
    modelState:null,
    nbiNumber:10,
    routeNbr:"1",
    routeTypeCd:"SR",
    transactionType:null,
    updatedDate:"0001-01-01T00:00:00",
    updatedUserId:0,
    updatedUserIdZ:null,
    updatedUserName:null
}, {
    countyCd:23,
    createdDate:"0001-01-01T00:00:00",
    createdUserId:0,
    createdUserIdZ:null,
    createdUserName:null,
    description:"SR [email protected] RR COMP OF IND",
    districtId:null,
    encryptedId1:null,
    encryptedId2:null,
    isDirty:false,
    modelState:null,
    nbiNumber:10,
    routeNbr:"1",
    routeTypeCd:"SR",
    transactionType:null,
    updatedDate:"0001-01-01T00:00:00",
    updatedUserId:0,
    updatedUserIdZ:null,
    updatedUserName:null
}];

var filters = ['countyCd', 'nbiNumber'];
var transformedRecords = bridges.map(bridge => filters.reduce((p, c) => { 
    p[c] = bridge[c];
    return p; 
}, {}));
console.log(transformedRecords);

Upvotes: 3

Related Questions