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的解决方案有多大的改进。