人是我的模型,数据是我的新信息,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.map
和Array.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'}
];
这样你就不需要硬编码密钥