Tengo una matriz de palabras y quiero buscar las palabras en la matriz de texto, encontrarlas y verificar si el siguiente elemento o elementos después de la palabra son números, insertar el número o los números con la palabra en el nuevo objeto y empujar el objeto a la nueva matriz. como esto:
words = ['blue' , 'red' , 'yellow' , 'grin' , 'black' , 'white']; text = ['xxx' , 'yyy' , 'red' , 'zzz' , 'black' , 65 , 54 , 'white' , 'aaa' , 'yellow' , 50 , 'ppp']; Output I want: [{'black' : [65 , 54] , 'yellow' : [50]}];Pero mi código actual solo devuelve los números después de la palabra y los inserta en una nueva matriz:
words = ['blue' , 'red' , 'yellow' , 'grin' , 'black' , 'white']; text = ['xxx' , 'yyy' , 'red' , 'zzz' , 'black' , 65 , 54 , 'white' , 'aaa' , 'yellow' , 50, 'ppp']; const set = new Set(words); let result = []; for (let i = 0; i < text.length; i++) { if (set.has(text[i])) { while (typeof text[i + 1] == "number") { result.push(text[++i]); } } } console.log(result) //output : [65 , 54 , 50]Entonces, ¿cómo puedo enviar números con sus claves a una matriz?
Todavía recopila números en la matriz de result si encuentra una palabra coincidente. Pero comienza con una matriz vacía para cada palabra coincidente.
No desea utilizar el operador de incremento en i para pasar por el text .
res es un Object en el que almacena palabras coincidentes como claves y matrices de result como valores.
words = ['blue' , 'red' , 'yellow' , 'grin' , 'black' , 'white']; text = ['xxx' , 'yyy' , 'red' , 'zzz' , 'black' , 65 , 54 , 'white' , 'aaa' , 'yellow' , 50, 'ppp']; const set = new Set(words); let res = {}; for (let i = 0; i < text.length; i++) { if (set.has(text[i])) { let result = []; let j = i; while (typeof text[j + 1] == "number") { result.push(text[++j]); } if(result.length > 0) res[text[i]] = result; } } console.log(res)No tiene la creación de objetos y empujando a la matriz principal correctamente. Está verificando si los nodos del text están allí en words de matriz, si eso se encuentra, está empujando los números después de esa palabra encontrada a una matriz correctamente. Pero no debe empujar eso a una matriz simple. en su lugar, debe enviarlo a un objeto que tenga la clave que encontró como coincidencia, inicialmente debe declararse como una matriz vacía. Allí, después de eso, los números deben ser enviados a esta matriz.
Encuentre el violín de trabajo para el mismo
const words = ['blue', 'red', 'yellow', 'grin', 'black', 'white']; // const text = ['black' , 50 , 'black' , 600 , 10 , 'black' , 40]; const text = ['xxx', 'yyy', 'red', 'zzz', 'black', 65, 54, 'white', 'aaa', 'yellow', 50, 'ppp']; const set = new Set(words); const finalResult = []; for (let i = 0; i < text.length; i++) { if (set.has(text[i])) { const newObj = {}; const key = text[i]; const result = []; while (typeof text[i + 1] == "number") { result.push(text[++i]); } if (result.length > 0) { newObj[key] = result finalResult.push(newObj); } } } console.log(finalResult); La implementación de Array.reduce de su requisito será así
const words = ['blue', 'red', 'yellow', 'grin', 'black', 'white']; // const text = ['black' , 50 , 'black' , 600 , 10 , 'black' , 40]; const text = ['xxx', 'yyy', 'red', 'zzz', 'black', 65, 54, 'white', 'aaa', 'yellow', 50, 'ppp']; const modifiedText = text.reduce((acc, curr, index) => { if (typeof text[index] === "string" && typeof text[index + 1] === "number" && words.includes(curr)) { const newArr = []; let startIndex = index + 1; while (text[startIndex] && typeof text[startIndex] === "number") { newArr.push(text[startIndex]); startIndex++; } if(newArr.length) { acc.push({[curr] : newArr }); } } return acc; }, []); console.log(modifiedText);Debe presionar un objeto que contenga la palabra como clave y los números que desee.
Algo como
words = ['blue' , 'red' , 'yellow' , 'grin' , 'black' , 'white']; text = ['xxx' , 'yyy' , 'red' , 'zzz' , 'black' , 65 , 54 , 'white' , 'aaa' , 'yellow' , 50, 'ppp']; const set = new Set(words); let result = []; for (let i = 0; i < text.length; i++) { if (set.has(text[i]) && typeof text[i + 1] == "number") { let key = text[i] let arr = [] while (typeof text[i + 1] == "number") { arr.push(++i) } result.push({[key]: arr}) } } console.log(result)