• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

161
Views
cuente cada valor duplicado en el objeto y aumente

Estoy luchando con seguir la lógica.

Estoy creando la siguiente matriz de objetos al ejecutar una cadena dada.

 [{"word":"Frank","c":1}, {"word":"Irina","c":1}, {"word":"Frank","c":1}, {"word":"Frank","c":1}, {"word":"Thomas","c":1}]

lo que quiero lograr es:

 [{"word":"Frank","c":3}, {"word":"Irina","c":1}, {"word":"Thomas","c":1}]

¿Cuál sería la mejor manera aquí?

Estoy enviando la cadena a esta función y creando la matriz. pero no soy capaz de conseguir lo que quiero.

 function words(str) { return str.split(" ").reduce(function(count, word) { if(word.length>2&&isLetter(word)){ data.push({word:word, count: 1}); } }, {}); }

gracias por la ayuda adrian

almost 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puede usar el acumulador de objetos para llevar la cuenta de cada palabra y luego usar Object.values() para obtener todos los valores.

 function words(str) { return Object.values(str.split(" ").reduce((result, word) => { result[word] ??= {word, count: 0}; result[word].count += 1; return result; }, {})); } console.log(words("Frank Irina Frank Frank Thomas"));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

almost 3 years ago · Juan Pablo Isaza Report

0

Suponiendo que c no siempre es 1 (en cuyo caso puede hacer lo que sugirió la otra publicación y simplemente llevar la cuenta de las palabras), puede hacerlo así, recorriendo los datos y sumando los valores de c en un búfer, usando word como clave para el búfer. Luego asigne los valores del búfer a una matriz final.

 const data = [{"word":"Frank","c":1}, {"word":"Irina","c":1}, {"word":"Frank","c":1}, {"word":"Frank","c":1}, {"word":"Thomas","c":1}]; //console.log(data); let buffer = {}; data.forEach(i=>{ let w = i.word; let words = buffer[w] || {word: w, c: 0}; words.c = ic*1 + words.c; buffer[w] = words; }); let final = Object.values(buffer).map(b=>{ return {word: b.word, c: bc}; }); console.log(final);

Esto funcionará para cualquier valor de c:

 const data = [{"word":"Frank","c":2}, {"word":"Irina","c":4}, {"word":"Frank","c":1}, {"word":"Frank","c":3}, {"word":"Thomas","c":1}]; //console.log(data); let buffer = {}; data.forEach(i=>{ let w = i.word; let words = buffer[w] || {word: w, c: 0}; words.c = ic*1 + words.c; buffer[w] = words; }); let final = Object.values(buffer).map(b=>{ return {word: b.word, c: bc}; }); console.log(final);

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error