У меня есть массив объектов с несколькими значениями. Я хотел бы получить только последние три значения (фамилия владельца, цвет и кора).
Я пытался использовать срез или длину, но безуспешно.
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 или React, сколько связано с простыми объектами и массивами в JavaScript и в целом с пониманием вашей собственной структуры данных...)
На самом деле я ошибся. Ошибок TypeScript нет, потому что мы не знаем, что такое MyValues.
Мои данные представляют собой массив, содержащий только один объект, значения которого мне нужно извлечь (только последние три).
@Emm: Всегда ли массив имеет длину ровно 1? Можете ли вы определить «последние три» в этом случае? Это конкретные свойства, которые вам нужны, или вы ожидаете, что объекты будут хранить свойства внутри себя в определенном порядке сортировки?
@Дэвид Да, длина массива всегда равна 1. Это именно те, которые мне нужны. Последние три не будут переупорядочены или изменены каким-либо образом.
Почему бы тогда просто не получить [myValues[0].ownerSurname, myValues[0].color, myValues[0].bark]?
@Emm: Итак, вам просто нужно что-то вроде этого?: value = {newData.map(({ ownerSurname, color, bark }) => ({ ownerSurname, color, bark }))} Это присвоит этому value prop новый массив, состоящий из того же количества объектов в исходном массиве, но новые объекты содержат только эти три конкретных свойства. (Непроверенный/свободный код, но идея состоит в том, чтобы просто .map перебрать массив и деструктурировать три нужных свойства, вернув эти свойства в новом объекте.)
@David Деструктуризация объектов работает, спасибо!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это больше относится к простому 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
Спасибо. Это означает, что у меня есть массив объектов, и я хотел бы работать с данными этого массива, он ссылается на объекты, поэтому мне следует использовать методы для объектов вместо массивов, верно?
Да, ты прав! Прежде всего вам нужно получить объект из массива.
Это должно вызвать некоторые ошибки в TypeScript, поскольку то, что показано, не является массивом строк; это массив одного объекта.