2. Esto es lo que codifiqué
¿Qué tiene de malo? ¿Cómo debo volver a trabajar?
const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; function swapPairs2(obj){ let newObject = {}; for(const key in obj){ let value = obj[key] newObject[value] = key; } return newObject; }3. Aquí están las pruebas
test(swapPairs2(object5), { 1: "a", 2: "b", 3: "c" });
prueba(swapPairs2(objeto6), { 1: "a" });
4. Aquí está el error que obtuve
Se supone que debo obtener el primer par clave-valor, pero un retorno aleatorio.
También puede invertir las entradas.
const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; const swapPairs2 = obj => Object.fromEntries( Object.entries(obj) .reverse() // Keep the first, not the last .map(entry => [entry[1], entry[0]]) // Reverse the key and vlaue ); console.log(swapPairs2(object5)); console.log(swapPairs2(object6));Puede hacerlo tomando las claves de objeto y usando el método Array.reduce() en las claves.
const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; const swapPairs2 = (obj) => Object.keys(obj) .reduce((a, c) => (a[obj[c]] = a[obj[c]] ?? c, a), {}); console.log(swapPairs2(object5)); console.log(swapPairs2(object6)); O usando el método Array.reduce() en Object.entries()
const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; const swapPairs2 = obj => Object.entries(obj) .reduce((acc, [key, val]) => (acc[val] = acc[val] ?? key, acc), {}) console.log(swapPairs2(object5)); console.log(swapPairs2(object6));Solo agregue los pares de valor/clave, si el valor aún no existe en newObject al verificar con el operador in :
function swapPairs2(obj) { const newObject = {}; for (const key in obj) { const value = obj[key]; if(!(value in newObject)) { newObject[value] = key; } } return newObject; } const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; console.log(swapPairs2(object5)); console.log(swapPairs2(object6)); Otra opción es usar Array.reduce() :
const swapPairs2 = obj => Object.entries(obj) .reduce((acc, [k, v]) => v in acc ? acc : { ...acc, [v]: k } , {}) const object5 = { a: 1, b: 2, c: 3, d: 1 }; const object6 = { a: 1, b: 1, c: 1, d: 1 }; console.log(swapPairs2(object5)); console.log(swapPairs2(object6));