skip to Main Content

I’m building my first project, an expense tracking app with React Native. It’s going very well.

I would like to concat the following 2 arrays.

[{"Day": "08/31/2022"}, {"Day": "09/01/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}]

[{"Amount": "40"}, {"Amount": "300"}, {"Amount": "1715"}, {"Amount": "250"}, {"Amount": "100"}, {"Amount": "200"}]

Final results should be:

[{"Day": "08/31/2022", "Amount": "40"}, {"Day": "09/01/2022","Amount": "300"}, {"Day": "08/31/2022","Amount": "1715"}, {"Day": "08/31/2022","Amount": "250"}, {"Day": "08/31/2022","Amount": "100"}, {"Day": "08/31/2022","Amount": "200"}]

My current code:

  const q = query(collection(db, "users"), where("moneda", "==", "$"));
  const unsubscribe = onSnapshot(q, (querySnapshot) => {
    const dolarCurrency = [];
    const months =[];
    querySnapshot.forEach((doc) => {
        dolarCurrency.push(doc.data().cantidad);
        months.push(doc.data().fecha)
    });

    const hash = months.map((Day) => ({ Day }));
    const hashDolar = dolarCurrency.map(( Amount ) => ({ Amount }))
  });

Everything is working fine, and I’m pulling live data from my firebase to convert it into a chart on React Native with Victory Native for all my personal expenses. So, this would be my last step.

Any help or advice is appreciated!

2

Answers


  1. You can use Array#map and object destructuring as follows:

    const days = [{"Day": "08/31/2022"}, {"Day": "09/01/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}, {"Day": "08/31/2022"}],
    
          amounts = [{"Amount": "40"}, {"Amount": "300"}, {"Amount": "1715"}, {"Amount": "250"}, {"Amount": "100"}, {"Amount": "200"}],
          
          output = days.map(({Day},i) => ({Day, ...amounts[i]}));
          
          console.log( output );
    Login or Signup to reply.
  2. Here’s a workaround if you want to apply some validations or use fallback value in cases such as if one array has more items than the other one:

    function combine(array1, array2) {
      // If either one is not an array or if both are empty, return an empty array.
      if (
        !Array.isArray(array1) ||
        !Array.isArray(array2) ||
        (!array1.length && !array2.length)
      ) {
        return [];
      }
      
      // If one array is empty, return the other one.
      if (array1.length && !array2.length) {
        return array1;
      }
      
      if (!array1.length && array2.length) {
        return array2;
      }
    
      let arrayToLoop = array1;
      let otherArray = array2;
      
      // If array2 has more items than array1, loop array2 instead.
      if (array2.length > array1.length) {
        arrayToLoop = array2;
        otherArray = array1;
      }
      
      return arrayToLoop.map((item, index) => {
        // Return the current item if it has no match.
        if (!otherArray[index]) {
          return item;
        }
        
        // Else, merge with otherArray's current item.
        return {
          ...item,
          ...otherArray[index],
        };
      })
    }
    
    console.log(combine(arr1, arr2))
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search