Javascript 在这种情况下,是否有更好的方法使用过滤器阵列?
我试图实现一个返回数组的函数 目标是过滤一个数组以获得黄色水果,但是如果有一个香蕉,则只返回所有香蕉而不是所有黄色水果 我的问题是,是否有其他方法来增强此功能,以避免过滤两次,而只进行一次过滤调用 这只是简单的Javascript。我可以使用JS的最新功能Javascript 在这种情况下,是否有更好的方法使用过滤器阵列?,javascript,arrays,Javascript,Arrays,我试图实现一个返回数组的函数 目标是过滤一个数组以获得黄色水果,但是如果有一个香蕉,则只返回所有香蕉而不是所有黄色水果 我的问题是,是否有其他方法来增强此功能,以避免过滤两次,而只进行一次过滤调用 这只是简单的Javascript。我可以使用JS的最新功能 let fruits = [ {name: 'Apple', color: 'Red', size: 'Small'}, {name: 'Banana', color: 'yellow', size: 'Medium'},
let fruits = [
{name: 'Apple', color: 'Red', size: 'Small'},
{name: 'Banana', color: 'yellow', size: 'Medium'},
{name: 'Orange', color: 'orange', size: 'Big'},
{name: 'Mango', color: 'yellow', size: 'Medium'},
{name: 'Guava', color: 'yellow', size: 'Medium'},
];
function getFruitsThatAreYellowButReturnOnlyBananaIfExists(fruits)
{
let yellowFruits = [];
const bananaFruit = fruits.filter(fruit => fruit.name === "Banana")
.map(banana => `I'm a banana ${banana.size}`);
if (bananaFruit.length > 0) {
return bananaFruit;
}
yellowFruits = fruits.filter(fruit => fruit.color === 'yellow')
.map(yellowFruit => `I'm ${yellowFruit.name} my color is yellow , my size is ${yellowFruit.size}`);
return yellowFruits;
}
const fruitsOrBanana = getFruitsThatAreYellowButReturnOnlyBananaIfExists(fruits);
如果水果
数组中有一个香蕉
,并且有一个这样的消息数组,我希望得到结果:
[ "I'm Mango my color is yellow , my size is Medium", "I'm Guava my color is yellow , my size is Medium" ]
如果
水果
数组中没有香蕉。您可以用一种方法编写这篇文章,这种方法并不奇特,但以后可能很容易理解:
const bananas = [];
const yellowFruits = [];
//Only requires 1 loop.
fruit.forEach(f => {
if (f.name === 'Banana') {
bananas.push(`I'm a banana ${f.size}`);
}
else if (f.color === 'yellow') {
yellowFruits.push(`I'm ${f.name} my color is yellow , my size is ${f.size}`);
}
});
if (bananas.length > 0) {
return bananas;
}
else {
return yellowFruits;
}
可以使用循环在对象数组上仅迭代一次。迭代时,可以在一个数组中收集香蕉
,在另一个数组中收集黄色水果。然后,如果有香蕉,可以返回香蕉数组,否则返回黄色水果数组
let fruits=[{名称:'Apple',颜色:'Red',大小:'Small'},{名称:'Banana',颜色:'yellow',大小:'Medium'},{名称:'Orange',颜色:'Orange',大小:'Big'},{名称:'Mango',颜色:'yellow',大小:'Medium'},{名称:'Guava',颜色:'yellow',大小:'Medium'};
函数getfruits为黄色,但返回值仅为ananai不存在(fruits)
{
让黄色水果=[],香蕉=[];
用于(水果的常数{名称、颜色、大小})
{
if(name.toLowerCase()=“banana”)
香蕉。推(`I'm a banana${size}`);
else if(color.toLowerCase()=“黄色”)
推送(`I'm${name}我的颜色是黄色,我的尺寸是${size}`);
}
返回香蕉。长度?香蕉:黄色水果;
}
log(getfruitsthatareyellowbutreturnonlybanainefexists(fruits));
水果[1]。名称=“柠檬”;
log(getfruitsthatareyellowbutreturnonlybanainefexists(fruits))代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
作为控制台包装{max height:100%!important;top:0;}
快速浏览,我个人一直主张使用一个.reduce()
而不是.filter()
+.map()
来减少迭代次数。除此之外,我不太确定你在问什么——你的代码似乎输出了你想要的东西。通过“更好的方式”,你具体是什么意思?就运行时间而言,如果这是你要问的,你最好只使用常规的旧方法,一次循环并处理它——最好的情况是O(1)和最坏的情况是O(n),而不是在这种情况下总是O(n)。加上basic for循环比.map之类的函数要快。如果代码有效,除非您有非常具体的请求或请求,否则这不是stackoverflow的好问题concern@Kaiido为了达到这一点,我更新了,读了这篇文章后,我错失了目标:如果有香蕉,那么就把香蕉退回,而不是所有黄色的水果