Tengo un conjunto de valores en una matriz bidimensional. Mapeé un objeto e hice una nueva matriz. La primera key de valor es una cadena y el segundo valor currentTasks[key] es una matriz donde cada valor tiene id , text y date .
const newArray = Object.keys(currentTasks).map(function(key){ return [key, currentTasks[key]]; });El newArray tiene una forma como esta...
['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}]Lo que quiero hacer es convertir newArray en la forma de un diccionario. Quiero hacer que el primer valor sea una clave y el segundo valor, en forma de HashMap, como un valor. ¿Cómo puedo convertir esta forma de matriz en un mapa hash como un par clave-valor?
{ '1': {id:'1', text: "Todo item #1", date: '2021-11-30'}, '2': {id:'2', text: "Todo item #2", date: '2021-12-12'}, '3': {id:'3', text: "Todo item #3", date: '2021-11-29'}, '4': {id:'4', text: "Todo item #4", date: '2021-12-03'}, }Quiero obtener una matriz de objetos anidados como esta.
const testValues = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const outputObject = {}; testValues.forEach(x => { outputObject[x[0]] = x[1]; }); console.log(testValues, outputObject);Si le gusta la brevedad, creo que está buscando el método de matriz reducida .
El método reduce() ejecuta una función de devolución de llamada "reductora" proporcionada por el usuario en cada elemento de la matriz, en orden, pasando el valor de retorno del cálculo en el elemento anterior. El resultado final de ejecutar el reductor en todos los elementos de la matriz es un valor único.
Puede proporcionar un valor inicial, que en este caso es un objeto literal. A continuación, puede mapear cada submatriz y proporcionar la clave: pares de valores.
const array1 = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const reducer = (previousValue, currentValue) => ({...previousValue, [currentValue[0]]: currentValue[1]}); // {1: {…}, 2: {…}, 3: {…}, 4: {…}} console.log(array1.reduce(reducer, {})); // as a one liner // array1.reduce((a, b) => ({...a, [b[0]]: b[1]}), {})O también podría usar un Mapa
El objeto Map contiene pares clave-valor y recuerda el orden de inserción original de las claves. Cualquier valor (tanto objetos como valores primitivos) se puede utilizar como clave o como valor.
const array1 = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ]; const newMap = new Map() array1.forEach(el => newMap.set(el[1], el[0])) // 1: {…}, 2: {…}, 3: {…}, 4: {…} newMap.forEach((key, value) => console.log(key, value))¿Supongo que esta es la salida que estás buscando?:
const values = [ ['1', {id:'1', text: "Todo item #1", date: '2021-11-30'}], ['2', {id:'2', text: "Todo item #2", date: '2021-12-12'}], ['3', {id:'3', text: "Todo item #3", date: '2021-11-29'}], ['4', {id:'4', text: "Todo item #4", date: '2021-12-03'}] ] const obj = {}; values.map(val => obj[val[0]] = val[1]) console.log(obj)