JavaScript筛选器方法-仅返回第一个对象

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"

在JavaScript中使用filter()方法,是否可以只返回通过测试的第一个实例?在cars数组中找到第一个对象后,我希望将该对象从当前位置移动到cars数组的开头

代码:

     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
更好,因为他需要索引,而不仅仅是值。@Oridori
findIndex
更好,因为他需要索引,而不仅仅是值。如果有问题,这会创建一个新数组,而不是修改原始的
cars
数组。如果有问题,这将创建一个新数组,而不是修改原始的
cars
数组。谢谢Dave!我刚刚更新了我的问题,并进行了跟进。在我获得AV交易的第一个位置之后,我还需要查找partnerCode==BU的元素。取决于哪个价格更便宜(AV与BU),我将不得不将其移动到第一或第二位置(在AV之前,反之亦然)。我可以使用findIndex实现这一点吗?在这种情况下,我需要使用多个findIndex吗?您可以再次运行基本相同的代码,但需要检查插入位置。看,太棒了,这太完美了。谢谢!:)谢谢你,戴夫!我刚刚更新了我的问题,并进行了跟进。在我获得AV交易的第一个位置之后,我还需要查找partnerCode==BU的元素。取决于哪个价格更便宜(AV与BU),我将不得不将其移动到第一或第二位置(在AV之前,反之亦然)。我可以使用findIndex实现这一点吗?在这种情况下,我需要使用多个findIndex吗?您可以再次运行基本相同的代码,但需要检查插入位置。看,太棒了,这太完美了。谢谢!:)