Javascript forEach和对象构造函数
我有以下代码,它接受一个对象数组并使用构造函数创建新对象 为了避免逐个创建实例,我尝试使用数组上的forEach方法创建它们 我遇到的问题是,当我尝试记录结果时,构造函数创建的对象返回为“未定义” 我认为这是因为对象的作用域在forEach回调的内部,在外部是不可访问的 有没有办法访问我创建的对象 如果没有,请任何人向我建议,如果有更好的方法,我可以结构我的代码,以实现相同的结果Javascript forEach和对象构造函数,javascript,object,Javascript,Object,我有以下代码,它接受一个对象数组并使用构造函数创建新对象 为了避免逐个创建实例,我尝试使用数组上的forEach方法创建它们 我遇到的问题是,当我尝试记录结果时,构造函数创建的对象返回为“未定义” 我认为这是因为对象的作用域在forEach回调的内部,在外部是不可访问的 有没有办法访问我创建的对象 如果没有,请任何人向我建议,如果有更好的方法,我可以结构我的代码,以实现相同的结果 // Array of 'Person' objects let persons = [ {
// Array of 'Person' objects
let persons = [
{
name: "A",
number: "000-1111-1111",
location: "London"
},
{
name: "B",
number: "000-2222-2222",
location: "Leeds"
},
{
name: "C",
number: "000-333-3333",
location: "London"
}
];
// Persons constructor
Person = function(name, number) {
this.name = name;
this.number = number;
};
// For each obj in array create a new constructor
persons.forEach(item => {
if (item.location === "London") {
let person = item.name;
person = new Person(item.name, item.number);
console.log(person);
}
});
// Console log out new object for 'A'
console.log( Person )
console.log( A );
据我所知,问题是您需要一个全局变量,该变量的名称是动态字符串。在这种情况下,假设您希望在全局范围内访问,则可以使用窗口对象:
let persons = [
{
name: "A",
number: "000-1111-1111",
location: "London"
},
{
name: "B",
number: "000-2222-2222",
location: "Leeds"
},
{
name: "C",
number: "000-333-3333",
location: "London"
}
];
// Persons constructor
Person = function(name, number) {
this.name = name;
this.number = number;
};
// For each obj in array create a new constructor
persons.forEach(item => {
if (item.location === "London") {
window[item.name] = new Person(item.name, item.number);
}
});
// Console log out new object for 'A'
console.log( Person )
console.log( A );
如果您想要的是包含构造的Person
对象的新数组,则可以使用.map()
。您还需要使用.filter()
,以便根据您的“伦敦”条件将结果限制为适当的元素:
let people = persons.filter(item => item.location === "London")
.map(item => new Person(item.name, item.number));
请注意,您确实应该使用
let
或var
或const
声明Person
变量;编写时,您的代码将创建一个隐式全局变量。使用.map()
而不是.forEach()
,返回每个构造的Person,您将得到一个新数组。编辑实际上使用.filter()
只获取伦敦人,然后使用.map()
人已经是一个对象或人的数组:/谢谢!你是对的,这就是我试图实现的——使新创建的person对象在forEach之外(以及全局)可用。谢谢大家的回答!