Tengo este fragmento de código:
this.serverlist = data.NodeList.map((a) => { if (a.productTypeId === "1") { return a.HostName; } }); this.serverlist = this.serverlist.filter((x) => { return x !== undefined; }); Y quiero reemplazar estas 2 declaraciones ( .map y .filter ) con .reduce . ¿Cómo puedo hacer eso?
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 );Podría entender tu fragmento como
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' ]Entonces podría combinar para usar reducir como este, filtrar y obtener datos relevantes de una sola vez
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);