JavaScript – это мощный язык программирования, который широко используется в веб-разработке. Массивы и объекты — два самых фундаментальных типа данных в JavaScript, и они широко используются в проектах кодирования. Однако работа с массивами и объектами может быть сложной, особенно для начинающих.

В этом сообщении блога мы более подробно рассмотрим массивы и объекты в JavaScript, а также рассмотрим некоторые распространенные трудности и проблемы, с которыми сталкиваются разработчики при работе с ними. Мы рассмотрим ряд тем, от базового синтаксиса и операций до более сложных методов работы с массивами и объектами.

Независимо от того, являетесь ли вы новичком, который только начинает работать с JavaScript, или опытным разработчиком, который хочет освежить свои навыки, этот пост для вас. К концу этого руководства у вас будет глубокое понимание массивов и объектов в JavaScript, и вы будете оснащены инструментами и методами, необходимыми для решения даже самых сложных задач кодирования.

Итак, давайте погрузимся и начнем осваивать проблемы с массивами и объектами в JavaScript!

Проблемы:

Напишите функцию, которая принимает на вход массив целых чисел и возвращает наибольшую разницу между любыми двумя элементами массива.

Решение:

// Write a function that takes an array of integers as input and
// returns the largest difference between any two elements in the array

function findLargestDifference (...args) {
  let sorted = args.sort((a, b) => a - b)
  return sorted[sorted.length - 1] - sorted[0];
}


let result = findLargestDifference(1, 45, 300, 2, 10, 23, 78);
console.log(result);

// Output
// 299

Для заданного массива целых чисел напишите функцию, которая возвращает новый массив, где каждый элемент представляет собой сумму всех элементов исходного массива, кроме элемента с текущим индексом.

Решение:

let arr = [
  23, 55, 23, 11, 203, 211, 102, 405
];

let findSumOfAllElements = function (arr = []) {
  let result = [];
  let sum = arr.reduce((acc, curr) => acc + curr, 0);
  for (let i = 0; i < arr.length; i++) {
    result.push(sum - arr[i])
  }
  return result;
}

console.log(findSumOfAllElements(arr));
// [1010, 978, 1010, 1022, 830, 822, 931, 628]

Напишите функцию, которая принимает на вход два массива и возвращает новый массив, содержащий только те элементы, которые являются общими для обоих входных массивов.

Решение:

function commonElements (arr1, arr2) {
  let result = [];
  let cache = {};
  for (let i = 0; i < arr1.length; i++) {
    let index = arr2.findIndex(e => arr1[i] == e);
    if (index !== -1 && !cache[""+arr1[i]]) {
      cache = {
        ...cache,
        [""+arr1[i]]: "TRUE"
      };
      result.push(arr1[i]);
    }
  }
  
  return result;
}

console.log(commonElements([23, 10, 12, 56, 90, 56, 10, 12, 12], [12, 10]));
// [10, 12]

Напишите функцию, которая принимает массив объектов и имя свойства в качестве входных данных и возвращает массив всех значений этого свойства в объектах.

Решение:

// Write a function that takes an array of objects
// and a property name as input and returns an array of
// all the values of that property in the objects.

// Note: We only use plain object not nested tree obj
function getValuesOfProperties(arr = [], props = "") {
  let result = [];

  if (arr.length > 0 && props) {
    for (let i = 0; i < arr.length; i++) {
      result.push(arr[i][props])
    }
  }
  return result;
}

const collection = [{
  "first_name": "Jane",
  "last_name": "Doe",
  "dob": 650451200000,
  "state": "California",
  "city": "Los Angeles",
  "login_count": 10,
  "created_date": "2022-01-01",
  "updated_date": "2022-02-15"
}, {
  "first_name": "John",
  "last_name": "Smith",
  "dob": 493219200000,
  "state": "New York",
  "city": "New York City",
  "login_count": 5,
  "created_date": "2021-06-15",
  "updated_date": "2021-07-30"
}, {
  "first_name": "Emily",
  "last_name": "Johnson",
  "dob": 856377600000,
  "state": "Texas",
  "city": "Houston",
  "login_count": 7,
  "created_date": "2022-03-01",
  "updated_date": "2022-03-23"
}]

console.log(getValuesOfProperties(collection, 'first_name'));

// [ 'Jane', 'John', 'Emily' ]

Напишите функцию, которая принимает на вход массив объектов и пару ключ-значение и возвращает массив всех объектов, имеющих эту пару ключ-значение.

Решение:

// Write a function that takes an array of objects and a key-value pair as
// input and returns an array of all the objects that have that key-value
// pair.

function findMatching(arr = [], props = "", value = "") {
  let result = [];
  let length = arr.length;
  for (let i = 0; i < length; i++) {
    if (arr[i][props] === value) {
      result.push(arr[i])
    }
  }
  return result;
}

const collection = [{
  "first_name": "Jane",
  "last_name": "Doe",
  "gender": "male",
  "dob": 650451200000,
  "state": "California",
  "city": "Los Angeles",
  "login_count": 10,
  "created_date": "2022-01-01",
  "updated_date": "2022-02-15"
}, {
  "first_name": "John",
  "last_name": "Smith",
  "gender": "male",
  "dob": 493219200000,
  "state": "New York",
  "city": "New York City",
  "login_count": 5,
  "created_date": "2021-06-15",
  "updated_date": "2021-07-30"
}, {
  "first_name": "Emily",
  "last_name": "Johnson",
  "gender": "female",
  "dob": 856377600000,
  "state": "Texas",
  "city": "Houston",
  "login_count": 7,
  "created_date": "2022-03-01",
  "updated_date": "2022-03-23"
}]

console.log(findMatching(collection, 'gender', 'female'))

// Output
// [{ first_name: 'Emily', last_name: 'Johnson', gender: 'female', dob: 856377600000, state: 'Texas', city: 'Houston', login_count: 7, created_date: '2022-03-01', updated_date: '2022-03-23' }]

Напишите функцию, которая принимает массив строк в качестве входных данных и возвращает объект, где ключи — это строки, а значения — количество раз, которое каждая строка появляется во входном массиве.

Решение:

// Write a function that takes an array of strings as input and returns
// an object where the keys are the strings and the values are the number
// of times each string appears in the input array.

function groupBy(...args) {
  let cache = {};
  let len = args.length;
  for (let i = 0; i < len; i++) {
    let props = args[i];
    if (cache[props]) {
      cache[props] += 1;
    } else {
      cache = {
        ...cache,
        [props]: 1
      }
    }
  }
  return cache;
}
console.log(groupBy("aa", "a1", "b1", "b1", "a1", "bb", "a1", "a1", "bb"));
// Output
// { aa: 1, a1: 4, b1: 2, bb: 2 }

Напишите функцию, которая принимает массив объектов и возвращает массив всех уникальных значений указанного свойства в объектах.

Решение:

function uniqueValues(arr = [], props = "") {
  let unique = [];
  let len = arr.length;
  let cache = {};
  for (let i = 0; i < len; i++) {
    let value = arr[i][props];
    if (!cache[value]) {
      cache = {
        ...cache,
        [value]: "TRUE"
      };
      unique.push(value)
    }
  }
  return unique;
}

const collection = [{
  "first_name": "Evelyn",
  "last_name": "Nguyen",
  "age": 25,
  "mobile_no": "7643908127"
}, {
  "first_name": "Dennis",
  "last_name": "Foster",
  "age": 36,
  "mobile_no": "7643908127"
}, {
  "first_name": "Ayaan",
  "last_name": "Sharma",
  "age": 21,
  "mobile_no": "9123456780"
}, {
  "first_name": "Sophie",
  "last_name": "Hernandez",
  "age": 44,
  "mobile_no": "7643908127"
}];

console.log(uniqueValues(collection, 'mobile_no'));
// Output
// [ '7643908127', '9123456780' ]

Советы для начинающих:

Пожалуйста, используйте ChatGPT для создания проблем с кодированием, связанных с Javascript, и попытайтесь решить их самостоятельно.

Спасибо