Как я могу получить последние три значения из массива объектов

У меня есть массив объектов с несколькими значениями. Я хотел бы получить только последние три значения (фамилия владельца, цвет и кора).

Я пытался использовать срез или длину, но безуспешно.

const myValues: MyValues<string>[] = [
   {
    name: "Lucky",
    surname: "Luck",
    age: "3",
    breed: "Shepherd",
    owner: "Paul",
    ownerSurname: "Luck",
    color: "Brown",
    bark: "All the time",
  },
]
const newData = myValues.slice(-3)
<MyComponent value = {newData}/>

Это должно вызвать некоторые ошибки в TypeScript, поскольку то, что показано, не является массивом строк; это массив одного объекта.

Heretic Monkey 08.07.2024 15:44

Вам нужны последние три элемента массива? Или вам нужен массив объектов, который является подмножеством свойств объектов в исходном массиве? Из попытки это не совсем понятно. (Похоже, это не столько связано с TypeScript или React, сколько связано с простыми объектами и массивами в JavaScript и в целом с пониманием вашей собственной структуры данных...)

David 08.07.2024 15:47

На самом деле я ошибся. Ошибок TypeScript нет, потому что мы не знаем, что такое MyValues.

Heretic Monkey 08.07.2024 15:49

Мои данные представляют собой массив, содержащий только один объект, значения которого мне нужно извлечь (только последние три).

Emm 08.07.2024 15:51

@Emm: Всегда ли массив имеет длину ровно 1? Можете ли вы определить «последние три» в этом случае? Это конкретные свойства, которые вам нужны, или вы ожидаете, что объекты будут хранить свойства внутри себя в определенном порядке сортировки?

David 08.07.2024 16:01

@Дэвид Да, длина массива всегда равна 1. Это именно те, которые мне нужны. Последние три не будут переупорядочены или изменены каким-либо образом.

Emm 08.07.2024 16:05

Почему бы тогда просто не получить [myValues[0].ownerSurname, myValues[0].color, myValues[0].bark]?

Heretic Monkey 08.07.2024 16:08

@Emm: Итак, вам просто нужно что-то вроде этого?: value = {newData.map(({ ownerSurname, color, bark }) => ({ ownerSurname, color, bark }))} Это присвоит этому value prop новый массив, состоящий из того же количества объектов в исходном массиве, но новые объекты содержат только эти три конкретных свойства. (Непроверенный/свободный код, но идея состоит в том, чтобы просто .map перебрать массив и деструктурировать три нужных свойства, вернув эти свойства в новом объекте.)

David 08.07.2024 16:08
Object.entries(myValues[0]).slice(-3) должно помочь. mdn object.entries
dale landry 08.07.2024 18:21

@David Деструктуризация объектов работает, спасибо!

Emm 09.07.2024 12:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
10
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это больше относится к простому Javascript, а не к React.

Если вы действительно хотите это знать, сначала вам нужно «получить» сам объект, в данном случае, поскольку это массив с одним единственным элементом, остается только выбрать индекс [0].

const myValues: MyValues<string>[] = [
   {
    name: "Lucky",
    surname: "Luck",
    age: "3",
    breed: "Shepherd",
    owner: "Paul",
    ownerSurname: "Luck",
    color: "Brown",
    bark: "All the time",
  },
]

const obj = myValues[0];

const newObj = { 
  ownerSurname: obj.ownerSurname, 
  bark: obj.bark, 
  color: obj.color 
};

<MyComponent value = {newObj}/>

Это базовые функции JavaScript, не связанные с React. Возможно, вам нужно найти более базовые уроки о том, как работают объекты и массивы в Javascript.

Я могу только догадываться, чего вы на самом деле хотите достичь, поэтому предложу несколько разных решений.

Я думаю, вы хотите получить только значения «ownerSurname», «color» и «bark» для каждого из ваших объектов в вашем массиве. Этого можно добиться следующим образом:

[{name: "name", age: 20}].map(value => ({name: value.name}))

В качестве объяснения: этот код отображает каждый объект, а затем возвращает новый объект только с полем «имя». Вы можете изменить этот код на свой конкретный пример.

Я также могу представить, что вы можете захотеть исключить все остальные значения только из одного объекта. Это может быть недоразумением при использовании других языков, таких как phps, где объекты обрабатываются с помощью скобок. Вы можете просто сделать это, удалив скобки из «myValues» следующим образом:

const myObject = {name: "name", age: 19}
const myNewObject = {name: myObject.name}

Обратите внимание, что срез принимает последние три значения массива, а не объекта. Пожалуйста, посмотрите разницу здесь: https://medium.com/@zac_heisey/objects-vs-arrays-42601ff79421

Спасибо. Это означает, что у меня есть массив объектов, и я хотел бы работать с данными этого массива, он ссылается на объекты, поэтому мне следует использовать методы для объектов вместо массивов, верно?

Emm 08.07.2024 16:02

Да, ты прав! Прежде всего вам нужно получить объект из массива.

Lucky 12.07.2024 09:19

Другие вопросы по теме