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?
const NodeList = [ { productTypeId: "1", HostName: "abc.com" }, { productTypeId: "2", HostName: "abc.com" }, { productTypeId: "1" }, { productTypeId: "1", HostName: "xyz.com" }, ]; let serverlist = NodeList.reduce(a=> { if (a.productTypeId === "1", return x !== undefined) { return a.HostName }); console.log(serverlist );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, filter and get relevant 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);