Not able to remove nested array element in array using Javascript

In the below the screen shot , mentioned nested element as child array.

enter image description here

I wanted to remove child array element , I used below the script but it’s only remove first element.

removeChildWidget(parIndex:number,index:number){
    if (parIndex >= 0) {
       const widgetNumber = this.dashRightWidget[parIndex]?.widgetNumber;
       const widgeDashtNumber = this.dashboardWidgets[parIndex]?.widgetNumber;

       this.widgets.forEach((widget) => {
        if (widget.widgetNumber == widgeDashtNumber) {

          console.log("wid",widget.child[index])
          if (index >= 0) widget.child.splice(index, 1)
         console.log("wid",widget)
        }
      });
      console.log('final output', this.dashboardWidgets)
  
    }    
  }

Why is there a companiesArray.filter is not a function error? [duplicate]

I import a list of companies and internships in the backend as shown:

{
    "companies": [
        {
            "companyID": 1,
            ...
            
        }
    ],
    "internships": [
        {
            "internshipID": 1,
            ...
        }
    ]
}

Btw this is saved as companies:
const [companies, setCompanies] = useState([])
my useEffect:

useEffect(() => {
        const fetchCompanies = async () => {
            try {
                const data = await companyService.getAll();
                console.log('Fetched Companies:', data);
                setCompanies(data);
                setLoading(false);
            } catch (error) {
                console.error('Error fetching data:', error);
                setError('Error fetching data');
                setLoading(false);
            }
        };
        fetchCompanies();
    }, []);

I then use this code to filter through the arrays when someone searches for a specific one (just for companies):

const companiesArray = companies["companies"]

const filteredCompanies = companiesArray.filter(company =>
    company[searchBy]?.toLowerCase().includes(searchTerm.toLowerCase())
);
console.log('Filtered Companies:', filteredCompanies)

I then get the error that companies.filter isnt a function and im not sure why

Since companies is an array, so i thought this should work. What should i try?

Why is there a companies.filter is not a function error?

I import a list of companies and internships in the backend as shown:

{
    "companies": [
        {
            "companyID": 1,
            ...
            
        }
    ],
    "internships": [
        {
            "internshipID": 1,
            ...
        }
    ]
}

Btw this is saved as companies:
const [companies, setCompanies] = useState([])

I then use this code to filter through the arrays when someone searches for a specific one (just for companies):

const companiesArray = companies["companies"]

const filteredCompanies = companiesArray.filter(company =>
    company[searchBy]?.toLowerCase().includes(searchTerm.toLowerCase())
);
console.log('Filtered Companies:', filteredCompanies)

I then get the error that companies.filter isnt a function and im not sure why

Since companies is an array, so i thought this should work. What should i try?

how to add widgets that stack vertically with a sidebar and main content area?

Design a responsive dashboard with the following sections a header sidebar main content area and three widgets that stack horizontally.

answers with code hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhh hhh hhhh hhhhh hhhhhh hhh hhhhhh hhhhh hhhh hhhh h h hh hh hh hh hh hh h h h h hhhh hhhhhhhhhh

How to output server-side console.log to browser’s console in Express.js with EJS template?

I’m building a weather forecast application using Express.js and EJS templates (for my college’s class). Currently, my console.log statements in server.js are only visible in the terminal/server console. I want to make these logs visible in the browser’s developer tools console for debugging purposes.

Here’s my current codes:

server.js:

import express from 'express';
import bodyParser from 'body-parser';
import path from 'path';
import axios from 'axios';

const app = express();
const API_KEY = 'MY_API_KEY_FOR_OPENWEATHERMAP';
const PORT = 3000;

// Add these middleware configurations before your routes
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// define the __dirname
const __dirname = path.resolve();

async function getForecast(city) {
    const url = `https://api.openweathermap.org/data/2.5/forecast?q=${city}&appid=${API_KEY}&units=metric`;
    // fetch version
    // const response = await fetch(url);
    // const data = await response.json();

    // axios version
    const response = await axios.get(url);
    const data = response.data;
    
    if (data.cod !== '200') {
        throw new Error(data.message);
    }
    
    return data;
}

app.get('/', (req, res) => {
    res.render(__dirname + '/weather.ejs');
});

app.post('/', async (req, res) => {
    try {
        const { city } = req.body;
        
        if (!city) {
            return res.status(400).render(__dirname + '/weather.ejs', { 
                error: 'City name is required' 
            });
        }

        const forecast = await getForecast(city);
        const dailyForecasts = forecast.list.filter((f, i) => i % 8 === 0);

        res.render(__dirname + '/weather.ejs', {
            city: forecast.city.name,
            forecasts: dailyForecasts
        });
    } catch (error) {
        res.render(__dirname + '/weather.ejs', { 
            error: error.message 
        });
    }
});

app.listen(PORT, () => {
    console.log(`Port ${PORT} is running.`);
});

weather.ejs

<!DOCTYPE html>
<html>
<head>
    <title>5-Day Weather Forecast</title>
    <style>
        .container { 
            max-width: 800px; 
            margin: 0 auto; 
            padding: 20px; 
        }
        .forecast-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
            gap: 20px;
            margin-top: 20px;
        }
        .forecast-card {
            border: 1px solid #ddd;
            padding: 15px;
            border-radius: 8px;
            background: #f5f5f5;
        }
        .error {
            color: red;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Weather Forecast</h1>
        
        <form action="/" method="POST">
            <input type="text" name="city" placeholder="Enter city name">
            <button type="submit">Get Forecast</button>
        </form>

        <% if (locals.error) { %>
            <div class="error"><%= error %></div>
        <% } %>

        <% if (locals.forecasts) { %>
            <% console.log(locals.forecasts) %>
            <h2>5-Day Forecast for <%= city %></h2>
            <div class="forecast-grid">
                <% forecasts.forEach(forecast => { %>
                    <div class="forecast-card">
                        <h3><%= new Date(forecast.dt * 1000).toLocaleDateString() %></h3>
                        <p>Temperature: <%= forecast.main.temp %>°C</p>
                        <p>Weather: <%= forecast.weather[0].main %></p>
                        <p>Humidity: <%= forecast.main.humidity %>%</p>
                        <p>Wind Speed: <%= forecast.wind.speed %> m/s</p>
                    </div>
                <% }) %>
            </div>
        <% } %>
    </div>
</body>
</html>

(My Local environment)

  • Mac M2
  • VSCode Version: 1.94.2 (Universal)
  • Chrome Version: 131.0.6778.70(Official Build) (arm64)

In my `weather.ejs` file, I used `<% console.log(locals.forecasts) %>` hoping to see the output in the browser’s console. However, it only shows up in my VSCode terminal instead.

How can I get the output to appear in the browser’s console?

Decimals in x axis only showing 0s and not rounding properly in ApexCharts, also “stepSize” not working

I’m attempting to create a line graph that should show an x and y axis that are both numbers to the second decimal. Say I pass a min of 0.0345 and a max of 5.2345, I would expect the first number on the x axis to be 0.035 and the last number on the x axis to be 5.23, however it shows me 0.00 and 6.00, why is this happening?

here is the xaxis portion of my chart options:

        xaxis: {
          type: 'category',
          categories: [],
          min: this.min,
          max: this.max,
          stepSize: 0.5,
          title: {
            text: 'Label'
          },
          labels: {
            formatter: function (val) {
              return val.toFixed(2);
            }
          },
        }

Another thing that’s happening is that the stepSize option doesn’t do anything! I am trying to do steps by .5 but it still steps up by whole integers. Any idea why?

Can share whatever code is relevant, let me know

React blank page on build

I’ve been learning React (kind of new to it) and I’m working on a project and I did an npm create vite@latest. So far everything works fine when I do run dev. However when I do run build, then go to the dist folder and open the index.html file I get a blank page.

So I do an inspect page in FireFox and I get these errors –

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resources at file:///assets/index-J7cny882.js. (Reason: CORS request not http)

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resources at file:///assets/index-BAXwXR6k.css. (Reason: CORS request not http)

I’m bit puzzled by this. Don’t know whats wrong or how to fix it. I did come across some things online that mentioned adding “homepage”: “.” to package.json. I did that but didn’t help.

I appreciate the help.

Thanks.

Remove drag events on Woocommerce single product flexslider image gallery (on mobile)

I am overall happy with using flexslider on mobile. However, I have implemented an overflow scroll on my horizontal thumbnails on mobile (They’re css’d to sit horizontally below the current slide). When I drag on the overflowed thumbnails, left or right, it progresses the current slide to the next/previous and won’t allow the overflow containing the thumbnails to be scrolled.

Current slide with thumbnails below

How can I disable the events causing the slider to progress to the next/previous slide when dragging on the current thumbnails? I only want the slider to progress on a thumbnail click.

I’ve tried the woocommerce_single_product_photoswipe_options and woocommerce_single_product_carousel_options filters which did not seem to have what I needed. A thread suggested dequeuing and enqueuing a custom woocomerce flexslider.js file but I’d like to avoid this.

How to create a custom dialog in Javascript with no JQuery?

On an ESP32, I have developed a wireless web server from scratch using micropython. Please correct me if I’m wrong, but I think using libraries like Flask and JQuery is not possible.

I’ve had lots of trouble running out of memory composing HTML pages. Currently, keeping an HTML page under 10k bytes avoids trouble. I use javascript as much as possible to reduce the HTML size and improve response time.

I need a dialog that has about 6 buttons. Each button posts a message to the server instructing a simple action.

I would like to do something like the following, which does not work.

dialog = document.createElement('dialog');
document.appendChild(dialog);

closeButton = document.createElement("button");
closeButton.innerHtml = "Close";
closeButton.onclick = function() {
   // figure out how to close this dialog
}
dialog.appendChild(closeButton);

dialog.showModal();

Any advice or a pointer to a useful tutorial will be greatly appreciated.

Javascript – How to recursively call a method as a callback?

As a learning exercise, I’m making a Javascript browser game where when the user presses a button, it simulates rolling several 6-sided dice and then shows images that correspond to the random value rolled on each dice. I have the basic functionality working. However, rather than immediately showing the end result of each dice, I want to have each dice image cycle through several different values before finally stopping on the end result, in the hopes that this will aesthetically feel more like rolling dice.

I’m trying to follow OOP, so I have the relevant objects and methods in a DiceGame class. To asynchronously let the dice images cycle without freezing all other functionality, I was thinking of using the setTimeout function.

Here’s a simplified version of what I’ve tried:

class DiceGame {
    constructor() {
        this.diceArray = [new Dice('dice01'), new Dice('dice02')]
    }

    rollAllDice(tumblesRemaining, tumbleDelay) {
        for (let index in this.diceArray) {
            this.diceArray[index].roll()  //this randomizes the value & image of a single Dice object
        }

        if (tumblesRemaining > 0) {
            function nextRecursiveFunction() {
                this.rollAllDice(tumblesRemaining-1, tumbleDelay+100);
            }           
            setTimeout(nextRecursiveFunction, tumbleDelay);
        }
    }

    playGame() 
    {       
        this.rollAllDice(10, 100);
    }
}

const game = new DiceGame()
game.playGame()

The intention is that this would do something like this:

  1. Set dice image to random value (example: 6).
  2. Wait for 100 milliseconds.
  3. Set dice image to random value (example: 2).
  4. Wait for 200 milliseconds.
  5. Keep following this pattern until ‘tumblesRemaining’ is 0, at which point that’s the final dice value.

…and while it does this, it wouldn’t be blocking any other functionality that the game has.

However, the actual code fails. My understanding is that when methods are called as callbacks, the callback doesn’t have access to an instantiated object to use as the context for that method, and thus it can’t access members. So when nextRecursiveFunction is called as a callback by setTimeout, it no longer sees itself as being within the scope of game, and because of that there is no this.rollAllDice function to call. This causes the failure.

I’ve tried to find solutions. I’ve found posts that have demonstrated how to call methods with parameters, I’ve found posts that have demonstrated how to call a single method as a callback, and I’ve found posts that demonstrate how to perform recursion with callbacks. However, I haven’t found a way to have an object recursively call its own method via callbacks without losing access to its members.

So I have two questions:

  1. Is there a way to make recursively calling methods via callbacks function in the way I’m intending?
  2. Aside from recursively calling methods via callbacks, is there a better way to accomplish the intention of this code (asynchronously cycling the dice images in OOP)?

And in case it helps, I want to clarify that I’m less interested in this specific problem and more interested in learning best practices and growing my understanding of JavaScript problem-solving. I just want to leverage this particular problem as a learning opportunity.

Enable SSE in AWS

I’m quite new to AWS, so I’m still learning stuff as I go.

I work on a project where we have multiple environments.
A while ago, I made some changes where I implemented some logic using ServerSentEvents in an Express.js server.

It was working excellent locally, but once I deployed my code to a test environment, the events were not sent anymore to the client, as they were blocked somehow. It took me a lot of time to find what the issue was, almost gave up to SSE, until finally I stumbled across an answer where that person was saying that there should be a setting enabled in AWS to allow the events to be sent.

Now, we have to launch another instance and I need to enable that setting again. The problem is I don’t remember at all where that setting was and I can’t find anything on the internet about this.

Could anyone show me where to find it in AWS Console? I’m going nuts right now!

Detect if PWA has been closed

im doing PWA app. How can i detect on frontend if user has closed my app? I do not mean keeping it in background. I want to invoke function on frontend when users close pwa from background processes. Something familiar to window.addEventListener('beforeunload',) but for PWA.

To be specific, i do have a chat app, i want to invoke LEAVE_ROOM socket emit when user has closed my app, i want to allow it work in background and being in queue(im sending user notification), but i want to leave queue when user closed app.

How can I render components dynamically with Vue 3?

I have a process which have many steps. Each one is implemented in a different component.

Initially I had this code:

<template>
  <template v-if="process.currentStep === 0">
    <Step0 />
  </template>
  <template v-else-if="process.currentStep === 1">
    <Step1 />
  </template>
  <template v-else-if="process.currentStep === 2">
    <Step2 />
      :
      :
</template>

<script setup>
import Step0 from "@/views/components/steps/step0.vue";
import Step1 from "@/views/components/steps/step1.vue";
import Step2 from "@/views/components/steps/step2.vue";
  :
  :

However, in order to make the code more readable, I tried to change to:

<template>
  <component :is="`Step${process.currentStep}`" />

But it doesn’t work.

I also tried:

<component :is="stepComponent" />

import { defineAsyncComponent } from 'vue';

const stepComponent = ref(); // Adjust the initial value as needed
const stepComponents = {
  Step0: defineAsyncComponent(() => import('@/views/components/steps/step0.vue')),
  Step1: defineAsyncComponent(() => import('@/views/components/steps/step1.vue')),
  Step2: defineAsyncComponent(() => import('@/views/components/steps/step2.vue')),
};

But neither get any result.

I don’t want to register these components in main.ts. Is there any way to do what I am trying to do?

Google Maps tiles not loading properly when Marker location significantly changes

I’m using @vis.gl/react-google-maps and React to create a Google Map. The parent component supplies a bunch of coordinates, which I apply to the map using new window.google.maps.LatLngBounds() and map.fitBounds() inside a useEffect. When the app sends a new set of coordinates, the useEffect creates a new instance of window.google.maps.LatLngBounds() and applies the bounds again.

For the most part this works fine, but if there is a significant change in location, say from Paris to somewhere in US, the tiles do not load properly.

Whatever I’ve searched on SO, the answers are quite old. There is also a workaround of adding the prop key={JSON.stringify(coordinateData)} that forces the map to re-render. But obviously that’s terribly inefficient, and I also lose the feature of the Map smoothly panning or zooming in to new locations.

import {
  AdvancedMarker,
  Map,
  useMap,
} from "@vis.gl/react-google-maps";

const MarkerWithInfoWindow = ({ activityData, position }) => {

return (
    <>
      <AdvancedMarker
        position={position}
        title={activityData.name}
      >
        <Image
           src={getActivityImgSrc(activityData)}
           width={36}
           height={36}
           alt={activityData.type}
        />
      </AdvancedMarker>
    </>
  );
};

export default function CustomMap({ displayData }) {
  const map = useMap();
  console.log('rerender map', displayData)

  useEffect(() => {
    if (!map || !displayData) return;


    const bounds = new window.google.maps.LatLngBounds();
    const { outdoorsData, travelData } = displayData;
    console.log(displayData);

    const yearsForFilter = new Set();

    for (var i = 0; i < outdoorsData.length; i++) {
      bounds.extend(
        new window.google.maps.LatLng(
          outdoorsData[i].coordinates.lat,
          outdoorsData[i].coordinates.lng
        )
      );
      yearsForFilter.add(new Date(outdoorsData[i].date).getFullYear());
    }
    for (var i = 0; i < travelData.length; i++) {
      for (var k = 0; k < travelData[i].coordinatesArray.length; k++) {
        bounds.extend(
           new window.google.maps.LatLng(
              travelData[i].coordinatesArray[k].lat,
              travelData[i].coordinatesArray[k].lng
           )
        );
      }
      if (travelData[i].startDate) {
         yearsForFilter.add(new Date(travelData[i].startDate).getFullYear());
      }
    }

    map.fitBounds(bounds);

  }, [map, displayData]);

return (
    <Map
        mapId="DEMO"
        defaultZoom={2}
        defaultCenter={{ lat: 5.145259, lng: -27.8719489 }}
        mapTypeControl={false}
        streetViewControl={false}
    // key={JSON.stringify(displayData)}
    >
        {displayData.outdoorsData.map((activityData, index) => {

            return (
                <MarkerWithInfoWindow
                    key={index}
                    activityData={activityData}
                    position={{
                        lat: activityData.coordinates.lat,
                        lng: activityData.coordinates.lng,
                    }}
                />
            );
        })}
        {displayData.travelData.map((activityData) => {
            return activityData.coordinatesArray.map((coordinatesObj, index) => {
                return (
                    <MarkerWithInfoWindow
                        key={index}
                        activityData={activityData}
                        position={{ lat: coordinatesObj.lat, lng: coordinatesObj.lng }}
                    />
                );
            });
        })}
    </Map>
);

};

Tiles not loading properly

Can you explain React’s rendering lifecycle and make sense why “Layout Rendered” is logged before rendering any of the JSX Components?

Layout

Navbar

Home

Console

I was trying to understand the lifecycle of a React functional component and I added some logs in the parent component to check if it renders before the children. Turns out any JS function called inside return is executed and then the JSX components and their content is rendered. Could anyone explain why that is?

Note that the 2 logs from Navbar between Layout rendering and Layout rendered is from the Navbar function call, while other functional JSX components are rendered later.