javascriptsortingflat

JavaScript push on a array which has been populated using map created a nested 2d array not a 1d array


// Data
const account1 = {
  owner: 'Jason Mike',
  movements: [200, 450, -400, 3000, -650, -130, 70, 1300],
  interestRate: 1.2, // %
  pin: 1111,
};

const account2 = {
  owner: 'Jessica Davis',
  movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30],
  interestRate: 1.5,
  pin: 2222,
};

const account3 = {
  owner: 'Steven Thomas Williams',
  movements: [200, -200, 340, -300, -20, 50, 400, -460],
  interestRate: 0.7,
  pin: 3333,
};

const account4 = {
  owner: 'Sarah Smith',
  movements: [430, 1000, 700, 50, 90],
  interestRate: 1,
  pin: 4444,
};

const accounts = [account1, account2, account3, account4];

//creating a owners array


const owners = [];
owners.push(accounts.map(acc => acc.owner).flat());
owners.push('Chris John');
owners.flat();

console.log(owners.sort());

output

enter image description here

why is it creating a nested array and not appending to the existing array

ps=> sorry this is my first question. Apologies if any mistakes


Solution

  • Why make it complex first creating an empty array and then push the elements and then flat.

    The map() method creates a new array populated with the results of calling a provided function on every element in the calling array.

    Use map directly and it will return result in a brand new array and then push the element into it.

    // Data
    const account1 = {
      owner: "Jason Mike",
      movements: [200, 450, -400, 3000, -650, -130, 70, 1300],
      interestRate: 1.2, // %
      pin: 1111,
    };
    
    const account2 = {
      owner: "Jessica Davis",
      movements: [5000, 3400, -150, -790, -3210, -1000, 8500, -30],
      interestRate: 1.5,
      pin: 2222,
    };
    
    const account3 = {
      owner: "Steven Thomas Williams",
      movements: [200, -200, 340, -300, -20, 50, 400, -460],
      interestRate: 0.7,
      pin: 3333,
    };
    
    const account4 = {
      owner: "Sarah Smith",
      movements: [430, 1000, 700, 50, 90],
      interestRate: 1,
      pin: 4444,
    };
    
    const accounts = [account1, account2, account3, account4];
    
    //creating a owners array
    const owners = accounts.map((acc) => acc.owner);
    owners.push("Chris John");
    console.log(owners);