将多个对象推送到已初始化的空对象数组中



人是我的模型,数据是我的新信息,forEach是我试图将新数据插入模型的方式,但格式仅为我关心的信息

people = [{name: '', age: 0}];
data = [
{id: '123', name: 'Bob', lastName: 'Guy', age: 40}, 
{id: '321', name: 'Michael', lastName: 'Park', age: 20}, 
]
data.forEach(person => {
people.push({
name: person.name,
age: person.age,
});
});

然而,我得到的结果是:

people = [
{name: '', age: 0}, 
{name: 'Bob', age: 40}, 
{name: 'Michael', age: 20}
];

我试着让对象数组看起来像这样:

people = [
{name: 'Bob', age: 40}, 
{name: 'Michael', age: 20}
];

然而,我想知道是否有一种方法可以在没有额外代码行的情况下完成它(比如弹出第一个元素(,以及是否有一个方法可以在一个命令中完成它?如果没有,我愿意接受建议。非常感谢。

您使用的是原始数组,不仅如此,还对数组进行了更改。

您可以使用函数Array.prototype.map来生成具有所需数据的新数组。

const people = [{name: '', age: 0}];
const data = [
{id: '123', name: 'Bob', lastName: 'Guy', age: 40}, 
{id: '321', name: 'Michael', lastName: 'Park', age: 20}, 
]
const result = data.map(person => ({
name: person.name,
age: person.age,
}));
console.log(result);

您也可以保留所需的密钥,通过使用函数Array.prototype.mapArray.prototype.reduce,您可以构建预期的结果:

const model = ["name", "age"];
const data = [
{id: '123', name: 'Bob', lastName: 'Guy', age: 40}, 
{id: '321', name: 'Michael', lastName: 'Park', age: 20}, 
]
const result = data.map(person => model.reduce((r, m) => ({...r, [m]: person[m]}), {}), []);
console.log(result);

如果你需要实现不同的人模型,你可以创建像这样的对象

peopleModel = [{ name: "", age: 0 }];
data = [
{ id: "123", name: "Bob", lastName: "Guy", age: 40 },
{ id: "321", name: "Michael", lastName: "Park", age: 20 },
];
const keysArr = Object.keys(peopleModel[0]);
const totalKeys = keysArr.length;
const people = data.reduce((acc, personObj) => {
const obj = {};
keysArr.forEach((key) => {
if (personObj[key]) {
obj[key] = personObj[key];
}
});
acc.push(obj);
return acc;
}, []);
console.log(people);
/* logs [
{name: 'Bob', age: 40}, 
{name: 'Michael', age: 20}
];
*/

但是如果你需要像这样的不同型号

peopleModel = [{ name: "", age: 0, lastName: "" }]

您将获得以下日志:

[
{name: 'Bob', age: 40, lastName: 'Guy'}, 
{name: 'Michael', age: 20, lastName: 'Park'}
];

这样你就不需要硬编码密钥

最新更新