JavaScript筛选器方法-仅返回第一个对象
在JavaScript中使用filter()方法,是否可以只返回通过测试的第一个实例?在cars数组中找到第一个对象后,我希望将该对象从当前位置移动到cars数组的开头 代码:JavaScript筛选器方法-仅返回第一个对象,javascript,arrays,sorting,methods,refactoring,Javascript,Arrays,Sorting,Methods,Refactoring,在JavaScript中使用filter()方法,是否可以只返回通过测试的第一个实例?在cars数组中找到第一个对象后,我希望将该对象从当前位置移动到cars数组的开头 代码: cars.filter(function(car) { var fareType = car.data("fareType"); var partnerCode = car.data("partnerCode"); if (fareType == "DEAL"
cars.filter(function(car) {
var fareType = car.data("fareType");
var partnerCode = car.data("partnerCode");
if (fareType == "DEAL" && partnerCode == "AV")
{
// get first instance only and move element to beginning of array
}
if (fareType == "DEAL" && partnerCode == "BU")
{
// also get first instance where partnerCode == BU only and move element to beginning of array
// If dataPrice is less than dataPrice for partner AV, move to first position, else move to second position
}
});
我将使用和:
let index=cars.findIndex(函数(car){
var fareType=汽车数据(“fareType”);
var partnerCode=car.data(“partnerCode”);
返回(票价类型=“交易”和合作伙伴代码=“平均价格”);
});
如果(索引!=-1){
出租汽车=汽车[指数];
汽车.拼接(索引1);
汽车。取消提升(汽车);
/*
*这可以减少到:
*
*汽车.非移位(…汽车.拼接(索引,1));
*
*为了清楚起见
*/
}
索引=汽车。findIndex(功能(汽车){
返回票价类型==“交易”&&partnerCode==“BU”;
});
如果(索引!=-1){
出租汽车=汽车[指数];
汽车.拼接(索引1);
如果(car.data('price')
我会使用和:
let index=cars.findIndex(函数(car){
var fareType=汽车数据(“fareType”);
var partnerCode=car.data(“partnerCode”);
返回(票价类型=“交易”和合作伙伴代码=“平均价格”);
});
如果(索引!=-1){
出租汽车=汽车[指数];
汽车.拼接(索引1);
汽车。取消提升(汽车);
/*
*这可以减少到:
*
*汽车.非移位(…汽车.拼接(索引,1));
*
*为了清楚起见
*/
}
索引=汽车。findIndex(功能(汽车){
返回票价类型==“交易”&&partnerCode==“BU”;
});
如果(索引!=-1){
出租汽车=汽车[指数];
汽车.拼接(索引1);
如果(car.data('price')
您可以使用findIndex()
您可以使用
findIndex()
你可以这样做:
let indexToGoFirst = 0;
cars.some((car, index) => {
const fareType = car.data('fareType');
const partnerCode = car.data('partnerCode');
if (fareType == 'DEAL' && partnerCode == 'AV') {
indexToGoFirst = index;
return True
}
})
cars[0] = cars[indexToGoFirst];
.some()
检查数组中是否有任何内容与条件匹配,并在满足条件时停止循环,因此您可以使用它来设置第一个元素 您可以执行以下操作:
let indexToGoFirst = 0;
cars.some((car, index) => {
const fareType = car.data('fareType');
const partnerCode = car.data('partnerCode');
if (fareType == 'DEAL' && partnerCode == 'AV') {
indexToGoFirst = index;
return True
}
})
cars[0] = cars[indexToGoFirst];
.some()
检查数组中是否有任何内容与条件匹配,并在满足条件时停止循环,因此您可以使用它来设置第一个元素 首先查找索引并使用元素创建新数组
var index = cars.findIndex(function(car) {
var fareType = car.data("fareType");
var partnerCode = car.data("partnerCode");
// get first instance only and move element to beginning of array
return fareType == "DEAL" && partnerCode == "AV";
});
var newCars = index > 0? [cars[index]].concat(cars.slice(0, index)).concat(cars.slice(index + 1): cars;
首先查找索引并使用元素创建新数组
var index = cars.findIndex(function(car) {
var fareType = car.data("fareType");
var partnerCode = car.data("partnerCode");
// get first instance only and move element to beginning of array
return fareType == "DEAL" && partnerCode == "AV";
});
var newCars = index > 0? [cars[index]].concat(cars.slice(0, index)).concat(cars.slice(index + 1): cars;
@Oridori
findIndex
更好,因为他需要索引,而不仅仅是值。@OridorifindIndex
更好,因为他需要索引,而不仅仅是值。如果有问题,这会创建一个新数组,而不是修改原始的cars
数组。如果有问题,这将创建一个新数组,而不是修改原始的cars
数组。谢谢Dave!我刚刚更新了我的问题,并进行了跟进。在我获得AV交易的第一个位置之后,我还需要查找partnerCode==BU的元素。取决于哪个价格更便宜(AV与BU),我将不得不将其移动到第一或第二位置(在AV之前,反之亦然)。我可以使用findIndex实现这一点吗?在这种情况下,我需要使用多个findIndex吗?您可以再次运行基本相同的代码,但需要检查插入位置。看,太棒了,这太完美了。谢谢!:)谢谢你,戴夫!我刚刚更新了我的问题,并进行了跟进。在我获得AV交易的第一个位置之后,我还需要查找partnerCode==BU的元素。取决于哪个价格更便宜(AV与BU),我将不得不将其移动到第一或第二位置(在AV之前,反之亦然)。我可以使用findIndex实现这一点吗?在这种情况下,我需要使用多个findIndex吗?您可以再次运行基本相同的代码,但需要检查插入位置。看,太棒了,这太完美了。谢谢!:)