Array al mapa basado en la propiedad de objetos que contiene artículos de matriz -- javascript campo con node.js camp codereview Relacionados El problema

Array to map based on object property containing array items


2
vote

problema

Español

Si tengo un objeto como seguir

  result  = [  {    phones : ["ABC", "DEF"],    name: "Simon"  },  {    phones : ["ABC", "XZY"],    name: "John"  } ]   

Salida esperada

Mapa de la clave, valor

  {ABC,     ["Simon", "John"]} {DEF,     ["Simon"]} {XYZ,     ["John"]}   

mi intento

  map: Map = new Map();    for ( r of result ) {    for( phone of r.phones) {       if(map.get(phone)){         map.set(phone, map.get(phone).concat(r.name))       } else {         map.set(phone, r.name);       }    } }   

¿Hay una manera de ES6 para realizar la doble iteración anterior de una manera minimizada?

Original en ingles

If i have a object like following

result  = [  {    phones : ["ABC", "DEF"],    name: "Simon"  },  {    phones : ["ABC", "XZY"],    name: "John"  } ] 

Expected output

Map of key, value

{ABC,     ["Simon", "John"]} {DEF,     ["Simon"]} {XYZ,     ["John"]} 

My try

map: Map = new Map();    for ( r of result ) {    for( phone of r.phones) {       if(map.get(phone)){         map.set(phone, map.get(phone).concat(r.name))       } else {         map.set(phone, r.name);       }    } } 

Is there a ES6 way to perform the above double iteration in a minimised way ?

     

Lista de respuestas

3
 
vote

general Su código es bastante razonable, después de arreglar algo que parece ser un error. La transformación que debe aplicarse a la estructura de datos no es completamente trivial, por lo que la lógica que debe implementarse requiere un puñado de líneas de código.

typo? Pero su código también tiene un typo / error: el 998877766555443359 establecerá el valor en el mapa para ser una cadena , No es una matriz. Probablemente quise hacer sizeof(struct node)6655443360 (¿Tal vez un Meccopy?) También hay 99887776655443361 , que no es válida sintaxis en JS, elimine el 99887776655443362 parte .

Operador condicional Si quiso acortar su código existente, consulte cómo está utilizando sizeof(struct node)3 Dependiendo de una condición: esta es una señal de que puede usar el condicional Operador en lugar del sizeof(struct node)4 / sizeof(struct node)5 .

  sizeof(struct node)6  

Pero aunque eso hace que el código sea más corto , ¿es más fácil leer? No estoy del todo convencido. Tal vez te guste, o tal vez no lo hagas.

Hay algunas otras cosas que pueden mejorar la calidad del código:

Declare sus variables Haciendo sizeof(struct node)7 Formará implícitamente una variable global 9988777666655443368 y lo ponga en el objeto global. Si está ejecutando en modo estricto, esto también lanzará un error. Siempre declare variables antes de usarlas, preferiblemente con sizeof(struct node)9 .

destrucción? con head0 head1 , usted crea una variable llamada head2 , que no es así intuitivo - ¿Qué es un head3 ? Tal vez desactivar el head4 y head5 Propiedades inmediatamente.

  99887766555443376  
 

Overall Your code is quite reasonable, after fixing something that looks to be a typo. The transformation that needs to be applied to the data structure isn't entirely trivial, so the logic that needs to be implemented requires a handful of lines of code.

Typo? But your code also has a typo/bug: the map.set(phone, r.name); will set the value in the map to be a string, not an array. You probably meant to do map.set(phone, [r.name]); (maybe a miscopy?) There's also map: Map = new Map();, which isn't valid syntax in JS, remove the : Map part.

Conditional operator If you wanted to shorten your existing code, see how you're using .map.set(phone, someExpression) depending on a condition - this is a sign that you can use the conditional operator instead of the if/else.

map.set(phone, (map.get(phone) ?? []).concat(r.name)); 

But while that makes the code shorter, is it easier to read? I'm not entirely convinced. Maybe you'll like it, or maybe you won't.

There are a few other things that can improve the code quality:

Declare your variables Doing for (r of result) will implicitly create a global r variable and put it on the global object. If you're running in strict mode, this will throw an error too. Always declare variables before using them, preferably with const.

Destructure? With for (r of result) or for (const r of result), you create a variable named r, which isn't so intuitive - what's an r? Maybe destructure the name and phones properties immediately.

const result  = [  {    phones : ["ABC", "DEF"],    name: "Simon"  },  {    phones : ["ABC", "XZY"],    name: "John"  } ] const map = new Map(); for (const { phones, name } of result) {   for (const phone of phones) {     map.set(phone, (map.get(phone) ?? []).concat(name));   } } console.log([...map]);
 
 

Relacionados problema

1  Descarga de imágenes de sitios web por el selector CSS  ( Downloading images from websites by css selector ) 
Escribí un pequeño módulo de Nodo.js para descargar imágenes de los sitios web por el selector CSS. Me gustaría saber cuáles son mis errores y cómo puedo corr...

5  Analice un archivo CSV y devuelva un objeto o matriz  ( Parse a csv file and return an object or array ) 
Recientemente publiqué un módulo de JavaScript para NPM que también está disponible on Github por el nombre de Rawiki-Pars-CSV. El código lleva datos RAW C...

3  Leyendo un archivo de texto, manipulándolo y guardándolo a una base de datos Mongo  ( Reading a text file manipulating it and saving it to a mongo database ) 
Tenemos un próximo proyecto en el trabajo que requerirá trabajar con Express.js. No tengo experiencia previa con Node.js, así que pensé que intentaría hacer a...

2  Implementación del patrón de observador para NOde.js  ( Implementation of observer pattern for node js ) 
Escribí una implementación del patrón de observador como parte de mi juego de ajedrez de batalla en línea : class Player attr_accessor :color, :pieces, ...

8  Contando novedades en un archivo  ( Counting newlines in a file ) 
He comenzado a pasar por tutoriales de nodos en nodoschool.io , y la segunda asignación fue escribir un programa que contará El número de nuevas líneas en un...

4  Usando variables globales en mi configuración de programa node.js  ( Using global variables in my node js program configuration ) 
Sé que usando variables globales en JavaScript es mala práctica. Aquí estoy usando la configuración, el host y el puerto como variables globales, ya que he ag...

1  Script por lotes para descargar y extraer nodos.js y paquetes NPM  ( Batch script to download and extract node js and npm packages ) 
El siguiente es mi primer intento real de Scripting por lotes, y lo soy nuevo, así que no estoy seguro de si lo que he hecho es practicar mejor. El código fun...

9  Resultados de promesa de almacenamiento en caché / de memorización  ( Caching memoizing promise results ) 
Me pregunto cuál podría ser el mejor enfoque. Un enfoque es en cadena cachedPromise y "regular", por lo tanto, si 9988777665544335 falla, llamamos a un ...

3  Reducir no. de líneas  ( Reduce no of lines ) 
Tengo el siguiente tipo de muchas funciones que muchas si las acusaciones están ahí hay alguna forma de reducir no. de líneas. import re from bs4 import Be...

1  Simple Node.js WebServer  ( Simple node js webserver ) 
Estoy en el proceso de escribir un servidor web simple.js. Estoy a mitad de camino en términos de funcionalidad. Consulte el código completo en este pastebin...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos