• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

137
Views
Problema de asignación de objetos de matriz a objeto simple

Estoy tratando de producir el objeto mencionado a continuación a partir de la matriz. Probé map and push desde Javascript pero no pude lograrlo. Proporcione un poco de pegamento para realizar esto.

 fn(); function fn() { var env = 'uat'; var userInput = 'appA'; var listOfApplications = [ { "appName":"common", "data":{ "uat":{ "baseUrl":"http://commonurl.com", "parameterX":"x", "parameterY":"y" } } }, { "appName":"appA", "data":{ "uat":{ "baseUrl":"http://uat.appA.com", "parameterA":"a", "parameterB":"b" } } }, { "appName":"appB", "data":{ "uat":{ "baseUrl":"http://uat.appB.com", "parameterC":"d", "parameterD":"c" } } } ]; var config = {}; switch (env) { case "uat": for (const s of listOfApplications) { if (userInput == s.appName || 'common' == s.appName) { config[s.appName] = s.appName config = s.data['uat'] } } break; } console.log(config); return config; }

Estoy tratando de producir el resultado mencionado a continuación.

 { "baseUrl": "http://commonurl.com", "parameterX": "x", "parameterY": "y", "appA": { "baseUrl": "http://uat.appA.com", "parameterA": "a", "parameterB": "b" } }

Por favor ayúdame con esto

about 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Problema:

Primero, quiero explicar los problemas en su código:

La línea

 config[s.appName] = s.appName

establece una propiedad en config pero la siguiente línea

 config = s.data['uat']

reasigna un nuevo objeto y sobrescribe todos los cambios anteriores. Hacer esto en un bucle da como resultado una config que contiene s.data['uat'] de la última iteración del bucle donde

 userInput == s.appName || 'common' == s.appName

devuelve true . Eso significa que la config contiene la configuración común o la configuración de la aplicación. También modifica involuntariamente sus datos originales. Después de la primera iteración del bucle, config = s.data['uat'] establece una referencia a un objeto en su objeto original. Luego, config = s.data['uat'] agrega una propiedad a este objeto. Puedes ver el problema con un console.log :

 fn(); function fn() { var env = 'uat'; var userInput = 'appA'; var listOfApplications = [{"appName": "common","data": {"uat": {"baseUrl": "http://commonurl.com","parameterX": "x","parameterY": "y"}}},{"appName": "appA","data": {"uat": {"baseUrl": "http://uat.appA.com","parameterA": "a","parameterB": "b"}}},{"appName": "appB","data": {"uat": {"baseUrl": "http://uat.appB.com","parameterC": "d","parameterD": "c"}}}]; var config = {}; switch (env) { case "uat": for (const s of listOfApplications) { if (userInput == s.appName || 'common' == s.appName) { config[s.appName] = s.appName config = s.data['uat'] } } break; } console.log(listOfApplications); return config; }

El primer elemento de la matriz en listOfApplications obtuvo una propiedad nueva sin querer.

Solución:

Parece que el resultado esperado es un objeto que contiene todas las propiedades de la configuración común y una propiedad con la configuración de la aplicación. Puede encontrar ambas configuraciones usando Array#find :

 fn(); function fn() { const env = 'uat'; const userInput = 'appA'; const listOfApplications = [{"appName": "common","data": {"uat": {"baseUrl": "http://commonurl.com","parameterX": "x","parameterY": "y"}}},{"appName": "appA","data": {"uat": {"baseUrl": "http://uat.appA.com","parameterA": "a","parameterB": "b"}}},{"appName": "appB","data": {"uat": {"baseUrl": "http://uat.appB.com","parameterC": "d","parameterD": "c"}}}]; const config = { ...listOfApplications.find(({ appName }) => appName === 'common')?.data[env], [userInput]: { ...listOfApplications.find(({ appName }) => appName === userInput)?.data[env] } }; console.log(config); return config; }

Creé una copia superficial de la configuración de la aplicación para evitar modificaciones inesperadas del objeto original. Para mí, configuraciones complejas con objetos anidados, debería considerar una copia profunda.

about 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error