Javascript 对象数组:建议通过对象键或数组索引或数组项本身选择特定项?

Javascript 对象数组:建议通过对象键或数组索引或数组项本身选择特定项?,javascript,arrays,object,Javascript,Arrays,Object,我正在处理类对象的数组[]。要求是使用该对象数组来记住当前选定的对象。例如,我有一个名为Person的类,contacts是var obj=new Person()的数组;触点。推(obj) class-Person(){ //道具、构造器和方法 } const contacts=[新人(0)、新人(1)、新人(2)、新人(3)] var选择人; 因此,我希望用户从联系人列表中选择任何人员,因此我使用和让用户允许选择任何人员,这意味着我使用人员的名称道具,因此我从用户那里获得人员的名称当用户选

我正在处理类对象的数组
[]
。要求是使用该对象数组来记住当前选定的对象。例如,我有一个名为
Person
的类,
contacts
var obj=new Person()的数组;触点。推(obj)

class-Person(){
//道具、构造器和方法
}
const contacts=[新人(0)、新人(1)、新人(2)、新人(3)]
var选择人;
因此,我希望用户从
联系人
列表中选择任何
人员
,因此我使用
让用户允许选择任何
人员
,这意味着我使用
人员
名称
道具,因此我从用户那里获得
人员
名称
当用户选择或执行任何需要与
人员
的对象交互的操作,或使用该对象为用户进行少量计算并显示结果时,立即进行选择

我可以在


onChange(e){
//存储该值并过滤掉,以便在需要计算时获得Person对象
selectedPerson=e.target.value
//存储联系人项目,即个人对象,并在任何地方使用
selectedPerson=contacts.find((person)=>person.name==e.target.value)
}
//对所选人员的多次使用
哪种方法更好?为什么

有没有其他方法可以更有效地实现同样的目标


请分享在这个问题上没有被正确询问的想法。

如果
名称
个人
对象数组中是唯一的,并且数组不是真正的大数组(如果它输入
选项
元素,则不会如此)。如果数组内容发生变化,使用
name
而不是数组索引也会更加健壮

您可以考虑使用<代码> map <代码>代替数组:

const contacts = new Map();
function addContact(person) {
    // If you want proactive notification of *replacing* a person, uncomment:
    // if (contacts.has(person.name)) {
    //     throw new Error(`contacts map already contains a person named ${person.name}`);
    // }
    contacts.set(person.name, person);
}
addContact(new Person(0));
addContact(new Person(1));
// ...
然后在
onChange
中:

onChange(e) {
    const person = contacts.get(e.target.value);
    // ...
}
这只是一个比数组扫描更有效的检索(但它与您将在
选项
元素中显示的人数无关),而且,对我来说,在语义上更适合该操作-没有重复名称的可能性。如果需要循环浏览映射中的条目(按添加顺序),则映射是可编辑的:

for (const person of contacts.values()) {
    // ...
}
您可以使用类:

const people=newmap()
people.set('Jane',new Person('Jane'))
people.set('John',newperson('John'))
people.has('Jane')//true
people.has('Jack')//false
console.log(people.get('Jane'))

就我个人而言,我会完全检索Person对象。否则,您只需将selectedPerson变量指定给一个名称,稍后您可能会使用该名称检索整个Person对象……也可以从一开始就将selectedPerson等同于Person对象