Javascript 如何优化属性数组映射
这里我有两个数组Javascript 如何优化属性数组映射,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,这里我有两个数组 var Usercar = [ {_id: 1, name: bmw, color: red}, {_id: 2, name: Ford, color: black}, {_id: 3, name: Volkswagen, color: black}, ] var Userfavorite = [1,3] 我想用地图显示用户最喜欢的汽车,比如 Usercar.
var Usercar = [
{_id: 1, name: bmw, color: red},
{_id: 2, name: Ford, color: black},
{_id: 3, name: Volkswagen, color: black},
]
var Userfavorite = [1,3]
我想用地图显示用户最喜欢的汽车,比如
Usercar.map((car,index)=>{
Userfavorite.map(re=>{
if (car._id === re)
{
<p>{car.name}</p>
}
})
})
我的问题是,这个映射会影响我的JSX页面?,因为我在一个页面中有多个这样的映射,以及如何优化这个映射
我看到当前页面加载速度很慢您可以使用filter、includes和map方法,使其复杂性为On,而不是On²,如下所示:
更新
已更改。includes为简单的存在性检查您可以使用filter、includes和map方法,使其复杂性为On而不是On²,如下所示:
更新
已更改。包括对存在性的简单检查
var Usercar=[
{{u id:1,名称:'bmw',颜色:'red'},
{{u id:2,名字:'Ford',颜色:'black'},
{{u id:3,名称:'大众',颜色:'黑色'},
]
var Userfavorite=[1,3]
const convertArrayToObject=数组,键=>{
常量initialValue={};
return array.reduceobj,item=>{
obj[项目[关键]]=项目;
返回obj;
},初始值;
};
var结果=
convertArrayToObject
用户汽车,
“\u id”,
;
console.logUserfavorite.mapx=>''+结果[x].name+''
var Usercar=[
{{u id:1,名称:'bmw',颜色:'red'},
{{u id:2,名字:'Ford',颜色:'black'},
{{u id:3,名称:'大众',颜色:'黑色'},
]
var Userfavorite=[1,3]
const convertArrayToObject=数组,键=>{
常量initialValue={};
return array.reduceobj,item=>{
obj[项目[关键]]=项目;
返回obj;
},初始值;
};
var结果=
convertArrayToObject
用户汽车,
“\u id”,
;
console.logUserfavorite.mapx=>''+结果[x].name+''<如果有多个地方需要这些映射,我可以考虑将用户车转换为A。因此,只需要一个循环,将复杂性降低到On
const userCarMap = new Map(Usercar.map(car => [car._id, car]));
// Map(3) {1 => {…}, 2 => {…}, 3 => {…}}
Userfavorite.map(fav => {
const carInfo = userCarMap.get(fav);
return <p>{carInfo.name}</p>
});
希望这有帮助。 < P>如果有多个地方需要这些映射,我可以考虑将UsCar转换为A。因此,只需要一个循环,将复杂性降低到On
const userCarMap = new Map(Usercar.map(car => [car._id, car]));
// Map(3) {1 => {…}, 2 => {…}, 3 => {…}}
Userfavorite.map(fav => {
const carInfo = userCarMap.get(fav);
return <p>{carInfo.name}</p>
});
希望这有帮助。
var Usercar=[
{{u id:1,名称:宝马,颜色:红色},
{{u id:2,姓名:福特,颜色:黑色},
{{u id:3,名称:大众,颜色:黑色}
];
var Userfavorite=[1,3];
var res=Usercar.filtercar=>Userfavorite.includescar.\u id
.mapitem=>item.name;
console.logres
var Usercar=[
{{u id:1,名称:宝马,颜色:红色},
{{u id:2,姓名:福特,颜色:黑色},
{{u id:3,名称:大众,颜色:黑色}
];
var Userfavorite=[1,3];
var res=Usercar.filtercar=>Userfavorite.includescar.\u id
.mapitem=>item.name;
console.logres 您不需要显式循环Userfavorite。您只需要检查id是否存在并返回JSX var Usercar=[ {{u id:1,名称:宝马,颜色:红色}, {{u id:2,姓名:福特,颜色:黑色}, {{u id:3,名称:大众,颜色:黑色}, ] var Userfavorite=[1,3] Usercar.mapcar,index=>Userfavorite.includescar.\u id {car.name}:空;
您不需要显式循环Userfavorite。您只需要检查id是否存在并返回JSX var Usercar=[ {{u id:1,名称:宝马,颜色:红色}, {{u id:2,姓名:福特,颜色:黑色}, {{u id:3,名称:大众,颜色:黑色}, ] var Userfavorite=[1,3] Usercar.mapcar,index=>Userfavorite.includescar.\u id {car.name}:空;
能否将userCar结构更改为object而不是数组?然后你可以简单地循环userfavorite数组并从userCar中获取值。是的,我得到了你,但是我在userCar的数组中有更多的东西:这个userCar数组来自任何api?或者您在本地构建它?您是如何确定这个循环是导致减速的原因的?那么,这些循环:您可以将userCar结构更改为object而不是数组吗?然后你可以简单地循环userfavorite数组并从userCar中获取值。是的,我得到了你,但是我在userCar的数组中有更多的东西:这个userCar数组来自任何api?或者您在本地构建它?您是如何确定此循环是导致减速的原因的?这些循环:非常感谢您的回答亲爱的,将检查:filter->。includes仍然在^2上,因为您必须在每次迭代中进行迭代。@VLAZ这里是filter,includes,然后是mapping,您有什么更好的想法吗?@HarryEdward检查我更新的答案。现在它是开着的,但它也是错的。Userfavorite[item.\u id]不会为您提供正确的项-您正在使用id作为n索引,但在OP的示例中,即使它存在于Userfavorite中,也会失败,因为数组中只有两个项,而获取索引3将找不到值为3的项。非常感谢您回答亲爱的,will check:filter->。includes仍在^2上,因为每次迭代都要进行一次迭代。@VLAZ这里是filter,includes,然后是mapping,你有什么更好的主意吗?@HarryEdward检查我的更新答案。现在它是开着的,但它也是错的。Userfavorite[item.\u id]不会为您提供正确的项目-您正在使用id作为n索引,但是
THOP的示例_id=3将失败,即使它出现在Userfavorite中,因为数组只有两项,并且获取索引3将找不到值为3的项。这仍然在^2上,因为。includes从中开始在On内进行另一次On迭代。Filter这仍然在^2上。includes从中开始在On内进行另一次On迭代。filterIt现在使用映射可能比使用对象更好,但这仍然是一个很好的解决方案。地图更现代。如果我们谈论性能,我假设这些阵列很大。。。将obj分解为一个新对象有点内存混乱。obj[item[key]]=item;return objIt现在使用Map可能比使用object更好,但它仍然是一个很好的解决方案。地图更现代。如果我们谈论性能,我假设这些阵列很大。。。将obj分解为一个新对象有点内存混乱。obj[item[key]]=item;回来obj@VLAZ这个答案怎么样:仍然在^2上。同样,.includes处于启用状态,并与.map的每个On回调一起执行。所以,这是一个嵌套循环。@HarryEdward我最好的猜测是在*m上,其中n是Usercar的长度,m是userfavorite的长度,在*m上更准确。关键是它是一个嵌套循环。如果不删除嵌套循环,复杂性将远远超过实际需要。老实说,我不确定减速是什么。如果您需要在循环的基础上进行大量的循环来查找Usercar中的项目,那么查找表就可以解决这个问题。但我不知道情况是否如此,或者算法的时间复杂性是否是其根本原因。我们需要更大的图景。我只是提出一些建议,因为大多数回复在复杂性方面并没有比OP的解决方案有多大改进。@VLAZ这个答案怎么样:仍然在^2上。同样,.includes处于启用状态,并与.map的每个On回调一起执行。所以,这是一个嵌套循环。@HarryEdward我最好的猜测是在*m上,其中n是Usercar的长度,m是userfavorite的长度,在*m上更准确。关键是它是一个嵌套循环。如果不删除嵌套循环,复杂性将远远超过实际需要。老实说,我不确定减速是什么。如果您需要在循环的基础上进行大量的循环来查找Usercar中的项目,那么查找表就可以解决这个问题。但我不知道情况是否如此,或者算法的时间复杂性是否是其根本原因。我们需要更大的图景。我只是提出一些建议,因为大多数回复在复杂性方面并没有比OP的解决方案有多大的改进。