Me gustaría filtrar y reestructurar algunos datos específicos, pero tengo algunos problemas para que produzcan la estructura adecuada.
Tengo esta respuesta de datos en esta estructura....
var response = { badProperty1: "bad property text" goodProperty1: "abc" goodProperty2: "bcd" goodProperty3: "cde" goodProperty4: "def" goodProperty5: "efg" badProperty2: "fgh" };Me gustaría convertir mi objeto de respuesta en una matriz como esta estructura exactamente...
var newFilteredStructuredArray = [ {goodProperty1: 'abc'}, {goodProperty2: 'bcd'}, {goodProperty3: 'cde'}, {goodProperty4: 'def'}, {goodProperty5: 'fgh'} ];Sin embargo, me gustaría filtrar las malas propiedades antes de obtener mi nueva matriz. Me gustaría que mi matriz solo incluya estos nombres de propiedad específicos y filtre todo lo demás con lo que comencé.
var possiblePropertyNames = ['goodProperty1', 'goodProperty2', 'goodProperty3', 'goodProperty4', 'goodProperty5'];una implementación que usa filter y map en las entradas de objeto de respuesta. En la etapa de filtro, filtro solo si está disponible en possiblePropertyNames . Luego, en la etapa del mapa, devuelvo la matriz en el formato que necesita
var possiblePropertyNames = ['goodProperty1', 'goodProperty2', 'goodProperty3', 'goodProperty4', 'goodProperty5']; var response = {badProperty1: "bad property text",goodProperty1: "abc",goodProperty2: "bcd",goodProperty3: "cde",goodProperty4: "def",goodProperty5: "efg",badProperty2: "fgh"} var newFilteredStructuredArray = Object.entries(response).filter(([k,v]) => possiblePropertyNames.includes(k)).map(([k,v]) => ({[k]:v})) console.log(newFilteredStructuredArray)sin es6
var possiblePropertyNames = ['goodProperty1', 'goodProperty2', 'goodProperty3', 'goodProperty4', 'goodProperty5']; var response = {badProperty1: "bad property text",goodProperty1: "abc",goodProperty2: "bcd",goodProperty3: "cde",goodProperty4: "def",goodProperty5: "efg",badProperty2: "fgh"} var newFilteredStructuredArray = Object.keys(response) .filter(function(a){ return possiblePropertyNames.includes(a) }) .map(function(b){ return {[b]:response[b]} }) console.log(newFilteredStructuredArray) ACTUALIZAR una mejor respuesta con solo un map en la matriz de possiblePropertyNames como lo señaló Andreas en los comentarios
var possiblePropertyNames = ['goodProperty1', 'goodProperty2', 'goodProperty3', 'goodProperty4', 'goodProperty5']; var response = {badProperty1: "bad property text",goodProperty1: "abc",goodProperty2: "bcd",goodProperty3: "cde",goodProperty4: "def",goodProperty5: "efg",badProperty2: "fgh"} var newFilteredStructuredArray = possiblePropertyNames.map(prop => ({[prop]:response[prop]})) console.log(newFilteredStructuredArray)