В среднем я работаю с JSON Data 18 раз в неделю. И мне все еще нужно Google для определенных способов манипулировать им почти каждый раз. Что если бы было окончательное руководство, которое всегда может дать вам ответ?
В этой статье я покажу вам основы работы с массивами объектов в JavaScript.
Если вы когда-нибудь работали с структурой JSON, вы работали с объектами JavaScript. Довольно буквально. JSON Подписывается для объекта JavaScript.
Создание объекта так же просто, как это:
{
"color": "purple",
"type": "minivan",
"registration": new Date('2012-02-03'),
"capacity": 7
}
Этот объект представляет собой автомобиль. Может быть много типов и цветов автомобилей, каждый объект затем представляет собой определенную машину.
Теперь, в большинстве случаев вы получаете такие данные из внешнего сервиса. Но иногда вам нужно создавать объекты и их массивы вручную. Как я сделал, когда я создал этот интернет-магазин:
Учитывая каждую категорию списка элемент, похоже на это в HTML:
Я не хотел, чтобы этот код повторил 12 раз, что сделало бы это ненаправленным.
Создание массива объектов
Но давайте вернемся к автомобилям. Давайте посмотрим на этот набор автомобилей:
Мы можем представлять это как массив таким образом:
let cars = [
{
"color": "purple",
"type": "minivan",
"registration": new Date('2017-01-03'),
"capacity": 7
},
{
"color": "red",
"type": "station wagon",
"registration": new Date('2018-03-03'),
"capacity": 5
},
{
...
},
...
]
Массивы объектов не остаются одновременно все время. Нам почти всегда нужно манипулировать их. Итак, давайте посмотрим, как мы можем добавить объекты в уже существующий массив.
Добавьте новый объект в начале – Array.unshift
Чтобы добавить объект в первой позиции, используйте Array.unshift Отказ
let car = {
"color": "red",
"type": "cabrio",
"registration": new Date('2016-05-02'),
"capacity": 2
}
cars.unshift(car);
Добавьте новый объект в конце – Array.push
Чтобы добавить объект на последней позиции, используйте Array.push Отказ
let car = {
"color": "red",
"type": "cabrio",
"registration": new Date('2016-05-02'),
"capacity": 2
}
cars.push(car);
Добавить новый объект в середине – Array.Splice
Чтобы добавить объект в середине, используйте Array.Splice Отказ Эта функция очень удобна, так как она также может удалить элементы. Следите за своими параметрами:
Array.splice(
{index where to start},
{how many items to remove},
{items to add}
);
Поэтому, если мы хотим добавить красный Volkswagen Cabrio на пятую позицию, мы использовали:
let car = {
"color": "red",
"type": "cabrio",
"registration": new Date('2016-05-02'),
"capacity": 2
}
cars.splice(4, 0, car);
Зацикливаться через массив объектов
Позвольте мне задать вам вопрос здесь: почему вы хотите зацикливаться через массив объектов? Причина, по которой я прошу, так это то, что цикл почти никогда не является основной причиной того, что мы хотим достичь.
JavaScript предоставляет множество функций, которые могут решить вашу проблему без реализации логики в общем цикле. Давайте взглянем.
Найдите объект в массиве по его значениям – Array.find
Допустим, мы хотим найти автомобиль, который красный. Мы можем использовать функцию Array.find Отказ
let car = cars.find(car => car.color === "red");
Эта функция возвращает первый сопоставленный элемент:
console.log(car);
// output:
// {
// color: 'red',
// type: 'station wagon',
// registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
// capacity: 5
// }
Также возможно искать несколько значений:
let.find (car => car.color && car.type);
В этом случае мы получим последний автомобиль в списке.
Получите несколько предметов из массива, соответствующего условию – Array.Filter
Array.find Функция возвращает только один объект. Если мы хотим получить все красные машины, нам нужно использовать Array.Filter Отказ
let redCars = cars.filter(car => car.color === "red");
console.log(redCars);
// output:
// [
// {
// color: 'red',
// type: 'station wagon',
// registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
// capacity: 5
// },
// {
// color: 'red',
// type: 'cabrio',
// registration: 'Sat Mar 03 2012 01:00:00 GMT+0100 (GMT+01:00)',
// capacity: 2
// }
// ]
Преобразовать объекты массива – Array.map
Это то, что нам нужно очень часто. Преобразуйте массив объектов в массив разных объектов. Это работа для Array.map Отказ Допустим, мы хотим классифицировать наши автомобили на три группы на основе их размера.
let sizes = cars.map(car => {
if (car.capacity <= 3){
return "small";
}
if (car.capacity <= 5){
return "medium";
}
return "large";
});
console.log(sizes);
// output:
// ['large','medium','medium', ..., 'small']
Также возможно создать новый объект, если нам нужно больше ценностей:
let carsProperties = cars.map(car => {
let properties = {
"capacity": car.capacity,
"size": "large"
};
if (car.capacity <= 5){
properties['size'] = "medium";
}
if (car.capacity <= 3){
properties['size'] = "small";
}
return properties;
});
console.log(carsProperties);
// output:
// [
// { capacity: 7, size: 'large' },
// { capacity: 5, size: 'medium' },
// { capacity: 5, size: 'medium' },
// { capacity: 2, size: 'small' },
// ...
// ]
Добавьте свойство на каждый объект массива – Array.Foreach
Но что, если мы хотим, чтобы объект автомобиля тоже? В этом случае мы можем улучшить объект для новой недвижимости Размер Отказ Это хороший выбор для Array.Foreach функция.
cars.forEach(car => {
car['size'] = "large";
if (car.capacity <= 5){
car['size'] = "medium";
}
if (car.capacity <= 3){
car['size'] = "small";
}
});
Сортировать массив по свойству – Array.sort
Когда мы закончимся с преобразованием объектов, нам обычно нужно отсортировать их так или иначе.
Как правило, сортировка основана на значении свойства каждого объекта. Мы можем использовать Array.sort Функция, но нам нужно предоставить функцию, которая определяет механизм сортировки.
Допустим, мы хотим отсортировать автомобили, основанные на их потенциале в порядке убывания.
let sortedCars = cars.sort((c1, c2) => (c1.capacity < c2.capacity) ? 1 : (c1.capacity > c2.capacity) ? -1 : 0);
console.log(sortedCars);
// output:
// [
// {
// color: 'purple',
// type: 'minivan',
// registration: 'Wed Feb 01 2017 00:00:00 GMT+0100 (GMT+01:00)',
// capacity: 7
// },
// {
// color: 'red',
// type: 'station wagon',
// registration: 'Sat Mar 03 2018 01:00:00 GMT+0100 (GMT+01:00)',
// capacity: 5
// },
// ...
// ]
Array.sort.sort. Сравнивает два объекта и помещает первый объект во втором месте, если результат функции сортировки положительна. Таким образом, вы можете посмотреть на функцию сортировки, как если бы это был вопрос: если первый объект будет размещен во втором месте?
Убедитесь, что всегда добавляйте корпус на ноль, когда сравнивающее значение обоих объектов одинаково, чтобы избежать ненужных свопов.
Проверка, если объекты в массиве выполняют условие – Array.ewy, Array.includes
Array.ewly и Массив .some Примите удобство, когда нам просто нужно проверить каждый объект для определенного состояния.
У нас есть красный кабрио в списке автомобилей? Все ли автомобили способны перевозить как минимум 4 человека? Или более веб-ориентирован: есть ли конкретный продукт в корзине?
cars.some(car => car.color === "red" && car.type === "cabrio"); // output: true cars.every(car => car.capacity >= 4); // output: false
Вы можете запомнить функцию Array.includes что похоже на Массив .some Но работает только для примитивных типов.
Резюме
В этой статье мы прошли основные функции, которые помогут вам создавать, манипулировать, преобразовывать и петлю через массивы объектов. Они должны охватывать большинство случаев, когда вы будете спотыкать.
Если у вас есть формат, который требует более продвинутых функций, посмотрите на Это подробное руководство по массивам или посетить W3 Школы Ссылка Отказ
Или Свяжитесь со мной И я подготовим другую статью:-)
Оригинал: “https://www.freecodecamp.org/news/javascript-array-of-objects-tutorial-how-to-create-update-and-loop-through-objects-using-js-array-methods/”