Javascript 如果属性与另一个数组匹配,则检索数组中的对象
如果contacts中的value属性与selectedContact中的值匹配,我想创建一个包含contact对象的新数组。有更简单的方法吗Javascript 如果属性与另一个数组匹配,则检索数组中的对象,javascript,arrays,typescript,object,angular6,Javascript,Arrays,Typescript,Object,Angular6,如果contacts中的value属性与selectedContact中的值匹配,我想创建一个包含contact对象的新数组。有更简单的方法吗 selectedContact: number[] = [0,2] //value contacts: Contact[] = [{ firstName:"Dan"; lastName:"Chong"; email:"danc@mail.com"; value:0; }, { firstName:"Mark"; lastNam
selectedContact: number[] = [0,2] //value
contacts: Contact[] = [{
firstName:"Dan";
lastName:"Chong";
email:"danc@mail.com";
value:0;
},
{
firstName:"Mark";
lastName:"Wong";
email:"markw@mail.com";
value:1;
},
{
firstName:"Layla";
lastName:"Sng";
email:"layla@mail.com";
value: 2;
}]
预期最终结果:
newArray = [{
firstName:"Dan";
lastName:"Chong";
email:"danc@mail.com";
value:0;
},{
firstName:"Layla";
lastName:"Sng";
email:"layla@mail.com";
value:2;
}];
我当前的解决方案:
const newArray: Contact[] = [];
this.selectedContact.forEach(index => {
newArray.push(this.contacts.find(c => c.value === index));
});
你可以用
filter方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素
及
includes方法确定数组是否包含某个元素,并根据需要返回true或false
工作代码示例:
var selectedContact=[0,2];
变量触点=[{
名字:丹,
姓:庄,,
电邮:danc@mail.com,
数值:0
},
{
名字:马克,
姓:王,
电邮:markw@mail.com,
价值:1
},
{
名字:莱拉,
姓氏:Sng,
电邮:layla@mail.com,
价值:2
}]
让newArray=contacts.filterc=>selectedContact.includesc.value;
console.lognewArray 你可以用
filter方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素
及
includes方法确定数组是否包含某个元素,并根据需要返回true或false
工作代码示例:
var selectedContact=[0,2];
变量触点=[{
名字:丹,
姓:庄,,
电邮:danc@mail.com,
数值:0
},
{
名字:马克,
姓:王,
电邮:markw@mail.com,
价值:1
},
{
名字:莱拉,
姓氏:Sng,
电邮:layla@mail.com,
价值:2
}]
让newArray=contacts.filterc=>selectedContact.includesc.value;
console.lognewArray 就性能而言,最好在selectedContacts上迭代,而不是在contacts上迭代,特别是因为contacts是作为数组索引的,并且您是通过索引进行选择的 假设联系人的长度为N,所选联系人的长度为M
由于selectedContacts是contacts的一个子集,我们在性能方面了解M,因此最好在selectedContacts上迭代,而不是在contacts上迭代,特别是因为contacts是作为数组索引的,并且您正在通过索引进行选择 假设联系人的长度为N,所选联系人的长度为M
由于selectedContacts是contacts的一个子集,我们知道M没有提到当前解决方案与预期结果之间的差异或遇到的任何错误。肯定有更好的方法,但你所说的更简单是什么意思,你在寻找什么?你对更简单的标准是什么?很难想出一个更简单的方法。不过,可能还有更有效的方法,比如创建联系人索引以供重用。对不起,我的意思是这样做更有效,不需要修改数组。当前解决方案提供了所需的输出,但是否有更有效的方法,例如不使用forEach循环?未提及当前解决方案与预期结果的差异或遇到的任何错误肯定有更好的方法,但您所说的更简单是什么意思,您在寻找什么?您对更简单的标准是什么?很难想出一个更简单的方法。不过,可能还有更有效的方法,比如创建联系人索引以供重用。对不起,我的意思是这样做更有效,不需要修改数组。当前的解决方案提供了所需的输出,但是否有更有效的方法,例如不使用forEach循环?@IBLEHZ是的,但works不是效率的衡量标准。——如果selectedContacts很小,这将很有效,但如果不是,则假设创建索引的成本可以恢复,则索引解决方案可能更好。@IBLEHZ是的,但工作不是效率的衡量标准。;-在selectedContacts较小的情况下,这将非常有效,但如果不是这样,则假设创建索引的成本可以恢复,则索引解决方案可能会更好。我明白了。谢谢你的详细解释!!:我懂了。谢谢你的详细解释!!:
this.selectedContact.forEach(index => {
newArray.push(this.contacts.find(c => c.value === index));
});
return this.selectedContact.map(index => this.contacts[index]);