I have this piece of code:
this.serverlist = data.NodeList.map((a) => { if (a.productTypeId === "1") { return a.HostName; } }); this.serverlist = this.serverlist.filter((x) => { return x !== undefined; });
And I want to replace this 2 statements(.map
& .filter
) with .reduce
. How do I do that?
Advertisement
Answer
I could understand your snippet as
const NodeList = [ { productTypeId: "1", HostName: "abc.com" }, { productTypeId: "2", HostName: "abc.com" }, { productTypeId: "1" }, { productTypeId: "1", HostName: "xyz.com" }, ] let serverlist = NodeList.map(a => { if (a.productTypeId === "1") { return a.HostName } }) serverlist = serverlist.filter(x => { return x !== undefined }) console.log(serverlist) // [ 'abc.com', 'xyz.com' ]
So you could combine to use reduce like this, do filter and get relevant pieces of data in one go
const NodeList = [ { productTypeId: "1", HostName: "abc.com" }, { productTypeId: "2", HostName: "abc.com" }, { productTypeId: "1" }, { productTypeId: "1", HostName: "xyz.com" }, ] const serverlist = NodeList.reduce((acc, el) => { if (el.productTypeId === "1" && el.HostName) { acc.push(el.HostName) } return acc }, []) console.log(serverlist)