chessplayer
chessplayer

Reputation: 41

nested arrays inside a function in a for-loop

I got the code below, which works perfectly fine. However, I'd also like to add a differentiator for each nested array inside data variable. For example, my code currently outputs (aside from my own error messages) -

... 5°C in 3 days... 10°C in 4 days... 4°C in 1 day... 5°C in 2 days... 6°C in 3 days

What I'd like to happen is this, where my differentiator dataset is printed with a count of a nested array where the °C is coming from -

dataset 2: ... 5°C in 3 days... 10°C in 4 days... 
dataset 4: ... 4°C in 1 day... 5°C in 2 days... 6°C in 3 days

I know there are other ways to simplify my str with other methods, but could you tell/show me if it's possible to do it with the existing code?

Many thanks.

const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]];

const printForecast = function (input) {
    let str = "";

    for (let i = 0; i < input.length; i++) {
        let count = 0;

        for (let b = 0; b < input[i].length; b++) {
            if (typeof input[i][b] !== "number") continue;

            str = `${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}`

            count++; 
        }
        if (count === 0) console.error(`No numbers in your nested array # ${i}! (message from me)`);
    }
    console.log(str);
}

printForecast(data);

EDIT: This is my second attempt:

const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]];

const printForecast = function (input) {
    let str = "";

    for (let i = 0; i < input.length; i++) {
        let count = 0;

        for (let b = 0; b < input[i].length; b++) {
            if (typeof input[i][b] !== "number") continue;

            console.log(`dataset ${i + 1}: ${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}`);

            count++; 
        }
        if (count === 0) console.error(`No numbers in your nested array # ${i}! (message from me)`);
    }
}

printForecast(data);

Upvotes: 0

Views: 85

Answers (2)

Rishabh Jain
Rishabh Jain

Reputation: 184

You can try this or If you want answers at end you can store each string str in array and print at last

const data = [
  [true, false],
  ["error", true, 5, 10, false],
  [true, false],
  [4, 5, 6],
  ["error, false"],
];

const printForecast = function (input) {
    
    for (let i = 0; i < input.length; i++) {
        let count = 0;
        let str = "";

    for (let b = 0; b < input[i].length; b++) {
      if (typeof input[i][b] !== "number") continue;

      str = `${str}... ${input[i][b]}°C in ${b + 1} day${
        b + 1 === 1 ? "" : "s"
      }`;

      count++;
    }
    if (count === 0)
      console.error(
        `No numbers in your nested array # ${i}! (message from me)`
      );
    else {
        console.log(`dataset ${i+1}: ${str}`);
    }

}

};
printForecast(data);

Upvotes: 1

xgmexgme
xgmexgme

Reputation: 139

This should work but I really wonder what your code does. This is one of the weirdest code I have ever seen.

EDIT: Your dataset counting in the post was 1 based but it was 0 based in the code for error printing. I made all of them 1 based.

const data = [[true, false], ["error", true, 5, 10, false], [true, false], [4, 5, 6], ["error, false"]];

const printForecast = function (input) {
    for (let i = 0; i < input.length; i++) {
        let count = 0;
        let str = "";

        for (let b = 0; b < input[i].length; b++) {
            if (typeof input[i][b] !== "number") continue;

            str = `${str}... ${input[i][b]}°C in ${b + 1} day${(b + 1) === 1 ? "" : "s"}`

            count++; 
        }
        if (count === 0) {
          console.error(`No numbers in your nested array # ${i+1}! (message from me)`);
        } else {
          console.log(`dataset ${i+1}: ${str}`);
        }
    }
}

printForecast(data);

Upvotes: 1

Related Questions