如何从对象数组的单个对象中提取最后三个属性值?
解决方法
你之前用myValues.slice(-3)没用,是因为这个方法是对数组元素做切片,而你的数组只有1个对象元素,返回的还是原数组,根本没处理对象里的属性。要提取对象的最后三个属性,得换个思路:
步骤1:取出数组里的单个对象
先从数组中拿到唯一的目标对象:
const targetObj = myValues[0];
步骤2:获取对象的最后三个属性名
用Object.keys()拿到对象的所有属性名(ES6+会按属性定义顺序返回),再用slice(-3)截取最后三个:
const lastThreeProps = Object.keys(targetObj).slice(-3) as ('ownerSurname' | 'color' | 'bark')[];
这里加类型断言是为了让TypeScript识别具体属性名,避免类型模糊。
步骤3:生成只包含目标属性的新对象
用reduce遍历属性名,组装成新对象:
const newData = lastThreeProps.reduce((result, prop) => { result[prop] = targetObj[prop]; return result; }, {} as Pick<MyValues<string>, 'ownerSurname' | 'color' | 'bark'>);
完整代码示例
const myValues: MyValues<string>[] = [ { name: "Lucky", surname: "Luck", age: "3", breed: "Shepherd", owner: "Paul", ownerSurname: "Luck", color: "Brown", bark: "All the time", }, ]; const targetObj = myValues[0]; const lastThreeProps = Object.keys(targetObj).slice(-3) as ('ownerSurname' | 'color' | 'bark')[]; const newData = lastThreeProps.reduce((result, prop) => { result[prop] = targetObj[prop]; return result; }, {} as Pick<MyValues<string>, 'ownerSurname' | 'color' | 'bark'>); <MyComponent value={newData}/>
简化写法(属性顺序固定时)
如果确定这三个属性永远是对象的最后三个,也可以直接解构:
const { ownerSurname, color, bark } = myValues[0]; const newData = { ownerSurname, color, bark };
这种写法更简洁,但仅适合属性结构固定的场景,后续属性顺序或数量变化时会失效。
内容的提问来源于stack exchange,提问作者Emm
相关产品推荐
相关产品推荐

