Tengo esta función que toma dos listas como argumentos. La primera letra de cada elemento de la lista "L" es la identificación de una categoría de libros. Por ejemplo, "BKWR" y "BTSQ" son libros de la misma categoría porque comienzan con la misma letra "B". El entero positivo separado por espacio es el número de libros en esa categoría. Ahora lo que hace la función es que toma la primera lista y hace coincidir la segunda lista ya sea que la categoría del libro que comienza con la letra esté presente o no. Si está presente, suma el número. Por ejemplo, en la lista "L" hay dos categorías de libros que comienzan con "B", por lo que se supone que debe sumarlas.
Sin embargo, en lugar de sumar los dos, mi función sobrescribe el valor de la categoría "B" anterior. ¿Cómo puedo evitar que sobrescriba el valor?
function extract(list,stocklist){ let newArr = []; for (let i = 0; i < stocklist.length; i++){ for (let j = 0; j < list.length; j++){ if (stocklist[i] == list[j][0]){ newArr.push(list[j]); } } } let selected = newArr.map((item) => item.split(' ')); let extracted = {}; for (let k = 0; k < selected.length; k++){ for (let l = 0; l < selected[k].length-1; l++){ let key = selected[k][l][0]; let value = selected[k][l+1]; extracted[key] = value; } } return extracted; } let L = ["ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600"]; let M = ["A", "B", "W"]; console.log(extract(L,M));Si ya hay un valor para la clave, agréguelo en lugar de sobrescribirlo. Así que cambia
extracted[key] = value;a
if (key in extracted) { extracted[key] += parseInt(value); } else { extracted[key] = parseInt(value); }En realidad, necesita agregar el "valor" a su objeto extracted :
function extract(list,stocklist){ let newArr = []; for (let i = 0; i < stocklist.length; i++){ for (let j = 0; j < list.length; j++){ if (stocklist[i] == list[j][0]){ newArr.push(list[j]); } } } let selected = newArr.map((item) => item.split(' ')); let extracted = {}; for (let k = 0; k < selected.length; k++){ for (let l = 0; l < selected[k].length-1; l++){ let key = selected[k][l][0]; let value = selected[k][l+1]; if(value) { extracted[key] = (+extracted[key] || 0) + +value; } } } return extracted; } let L = ["ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600"]; let M = ["A", "B", "W"]; console.log(extract(L,M));Aquí está la parte menor que te falta. Verifique la clave y resuma, o simplemente asigne el primer valor como:
extracted[key] = extracted[key] ? extracted[key] + Number(value) : Number(value);