Caso de uso 1
Suponiendo que tengo 2dArray Object de
let arr = [{'getName':'Report1'},{'getName':'User'},{'getName':'report 2'},{'getName':'User'},{'getName':'User'}] let _NotRequiredSheet = ['User','Report 254',...]Estoy tratando de optimizar mi script con programación funcional que me devolverá una serie de
['report1','report2']El método actual que estoy usando y que no tiene ningún error es:
for(let i =0;i < arr.length;i++){ if(arr[i].getName != _NotRequiredSheet[0]){ console.log(arr[i].getName) } }Pero esto tendrá un impacto si _notrequiredSheet tiene una gran lista de lo que no se requiere
Intenté usar este enfoque que usa filtro, pero dado que es 2dObject Array, no estoy seguro de cómo debería implementarse. Lo que hice en mi poc es
//Approach 1 : Not Working let result = arr.filter(function (arr) { return arr.getName != _NotRequiredSheet.values(); }) //Output should be as 1dArray['report1','report2'] , not (5) [{…}, {…}, {…}, {…}, {…}] console.log(result) //Approach 2 : Will output as 2D array with filtered value // Will require to hardcord the index which is not advisable let result = arr.filter(function (arr) { return arr.getName != _NotRequiredSheet[0]; }) console.log(result)Quería verificar si hay alguna forma en que pueda pasar el uso de for loop con la función de filtro. El resultado debería devolverse como una matriz 1D que es
['Informe1','Informe2']
El caso de uso 1 está resuelto
Caso de uso 2: matriz de objetos 2D Suponiendo que los datos se declaran como
let arr2 = [ {$0:{'Name':'Report1'}}, {$0:{'Name':'Report2'}}, {$0:{'Name':'User'}} ] El resultado debería mostrar esto en console.log (2) [{…}, {…}] , la función de filtro eliminará 'Usuario' como se refleja en _NotRequiredSheet.
Usando la sintaxis que escribí
let result = arr2.map(item => item.$0.Name).filter(Name => !_NotRequiredSheet.includes(Name))Esto devolverá como una sola matriz
Puede filtrar sus datos buscando valores no deseados y mapear solo la propiedad deseada.
const data = [{ getName: 'Report1' }, { getName: 'User' }, { getName: 'report 2' }, { getName: 'User' }, { getName: 'User' }], _NotRequiredSheet = ['User', 'Report 254'], result = data .filter(({ getName }) => !_NotRequiredSheet.includes(getName)) .map(({ getName }) => getName); console.log(result);con un conjunto
const data = [{ getName: 'Report1' }, { getName: 'User' }, { getName: 'report 2' }, { getName: 'User' }, { getName: 'User' }], _NotRequiredSheet = ['User', 'Report 254'], take = k => o => o[k], hasNot = s => v => !s.has(v), comp = f => g => o => f(g(o)), result = data .filter( comp(hasNot(new Set(_NotRequiredSheet)))(take('getName')) ) .map(({ getName }) => getName); console.log(result);Recomiendo usar reduce() para que pueda devolver algo basado en _NotRequiredSheet.includes(cur.getName)
let arr = [{'getName':'Report1'},{'getName':'User'},{'getName':'report 2'},{'getName':'User'},{'getName':'User'}] let _NotRequiredSheet = ['User','Report 254' ]; let res = arr.reduce((prev, cur) => { if (_NotRequiredSheet.includes(cur.getName)) { return prev; } else { return [ ...prev, cur.getName ]; } }, []); console.log(res);