--- id: a5de63ebea8dbee56860f4f2 title: Diff Two Arrays localeTitle: Diferencia dos matrices isRequired: true challengeType: 5 --- ## Description
Compare dos arreglos y devuelva un nuevo arreglo con los elementos que solo se encuentran en uno de los dos arreglos dados, pero no en ambos. En otras palabras, devuelva la diferencia simétrica de las dos matrices. Recuerda usar Read-Search-Ask si te atascas. Trate de emparejar el programa. Escribe tu propio código. Nota
Puede devolver la matriz con sus elementos en cualquier orden.
## Instructions
## Tests
```yml tests: - text: ' diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]) debe devolver una matriz.' testString: 'assert(typeof diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]) === "object", "diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]) should return an array.");' - text: ' ["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] debe devolver ["pink wool"] . ' testString: 'assert.sameMembers(diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]), ["pink wool"], "["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return ["pink wool"].");' - text: ' ["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] debería devolver una matriz con un elemento '. testString: 'assert(diffArray(["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]).length === 1, "["diorite", "andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return an array with one item.");' - text: ' ["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] debe devolver ["diorite", "pink wool"] . testString: 'assert.sameMembers(diffArray(["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]), ["diorite", "pink wool"], "["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return ["diorite", "pink wool"].");' - text: ' ["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] debe devolver una matriz con dos elementos. testString: 'assert(diffArray(["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"]).length === 2, "["andesite", "grass", "dirt", "pink wool", "dead shrub"], ["diorite", "andesite", "grass", "dirt", "dead shrub"] should return an array with two items.");' - text: ' ["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] debe devolver [] .' testString: 'assert.sameMembers(diffArray(["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"]), [], "["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] should return [].");' - text: ' ["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] debe devolver una matriz vacía.' testString: 'assert(diffArray(["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"]).length === 0, "["andesite", "grass", "dirt", "dead shrub"], ["andesite", "grass", "dirt", "dead shrub"] should return an empty array.");' - text: ' [1, 2, 3, 5], [1, 2, 3, 4, 5] debe devolver [4] .' testString: 'assert.sameMembers(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]), [4], "[1, 2, 3, 5], [1, 2, 3, 4, 5] should return [4].");' - text: ' [1, 2, 3, 5], [1, 2, 3, 4, 5] debe devolver una matriz con un elemento.' testString: 'assert(diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]).length === 1, "[1, 2, 3, 5], [1, 2, 3, 4, 5] should return an array with one item.");' - text: ' [1, "calf", 3, "piglet"], [1, "calf", 3, 4] debe devolver ["piglet", 4] .' testString: 'assert.sameMembers(diffArray([1, "calf", 3, "piglet"], [1, "calf", 3, 4]), ["piglet", 4], "[1, "calf", 3, "piglet"], [1, "calf", 3, 4] should return ["piglet", 4].");' - text: ' [1, "calf", 3, "piglet"], [1, "calf", 3, 4] debe devolver una matriz con dos elementos.' testString: 'assert(diffArray([1, "calf", 3, "piglet"], [1, "calf", 3, 4]).length === 2, "[1, "calf", 3, "piglet"], [1, "calf", 3, 4] should return an array with two items.");' - text: ' [], ["snuffleupagus", "cookie monster", "elmo"] debe devolver ["snuffleupagus", "cookie monster", "elmo"] .' testString: 'assert.sameMembers(diffArray([], ["snuffleupagus", "cookie monster", "elmo"]), ["snuffleupagus", "cookie monster", "elmo"], "[], ["snuffleupagus", "cookie monster", "elmo"] should return ["snuffleupagus", "cookie monster", "elmo"].");' - text: ' [], ["snuffleupagus", "cookie monster", "elmo"] debe devolver una matriz con tres elementos.' testString: 'assert(diffArray([], ["snuffleupagus", "cookie monster", "elmo"]).length === 3, "[], ["snuffleupagus", "cookie monster", "elmo"] should return an array with three items.");' - text: ' [1, "calf", 3, "piglet"], [7, "filly"] debe devolver [1, "calf", 3, "piglet", 7, "filly"] .' testString: 'assert.sameMembers(diffArray([1, "calf", 3, "piglet"], [7, "filly"]), [1, "calf", 3, "piglet", 7, "filly"], "[1, "calf", 3, "piglet"], [7, "filly"] should return [1, "calf", 3, "piglet", 7, "filly"].");' - text: ' [1, "calf", 3, "piglet"], [7, "filly"] debe devolver una matriz con seis elementos.' testString: 'assert(diffArray([1, "calf", 3, "piglet"], [7, "filly"]).length === 6, "[1, "calf", 3, "piglet"], [7, "filly"] should return an array with six items.");' ```
## Challenge Seed
```js function diffArray(arr1, arr2) { var newArr = []; // Same, same; but different. return newArr; } diffArray([1, 2, 3, 5], [1, 2, 3, 4, 5]); ```
## Solution
```js function diffArray(arr1, arr2) { var newArr = []; var h1 = Object.create(null); arr1.forEach(function(e) { h1[e] = e; }); var h2 = Object.create(null); arr2.forEach(function(e) { h2[e] = e; }); Object.keys(h1).forEach(function(e) { if (!(e in h2)) newArr.push(h1[e]); }); Object.keys(h2).forEach(function(e) { if (!(e in h1)) newArr.push(h2[e]); }); // Same, same; but different. return newArr; } ```