在if条件

时间:2015-10-14 22:42:56

标签: javascript arrays array-splice

为什么不删除下面的数组。

var removeableIndex =-1;
        bookingStatus.bookings.filter(function(item, index) {
            if(item.id == id){
                removeableIndex = index;
                return true;
            }
            return false;
        });
        console.log(removeableIndex)
        if(removeableIndex)
            var result = bookingStatus.bookings.splice(removeableIndex,1);

我已经通过了正确的预订。 过滤器正确匹配。 当removeableIndex为0时,这不会删除项。假设如果removeableIndex大于零,则删除它。

对于包含 removeableIndex 在内的所有情况,小代码更改正常的代码均为0。

var removeableIndex =-1;
        bookingStatus.bookings.filter(function(item, index) {
            if(item.id == id){
                removeableIndex = index;
                return true;
            }
            return false;
        });
        console.log(removeableIndex)
        if(removeableIndex > -1)
            var result = bookingStatus.bookings.splice(removeableIndex,1);

唯一不同的是 if(removeableIndex> -1)

我想知道为什么第一组代码只有在零索引时才删除该项。

3 个答案:

答案 0 :(得分:3)

当索引为零时,此条件将为false:

if(removeableIndex)

当您使用变量作为整个条件时,它将被计算为布尔值。它的工作原理如下:

if(removeableIndex != 0)

答案 1 :(得分:1)

了解JavaScript如何将数字评估为布尔值非常重要。 0被评估为false,所有其他数字被评估为真。

因为您的removeableIndex从-1开始,它将评估为true。如果您的过滤器与索引0处的项匹配,则它将评估为false。

如果将默认值更改为评估为false的值,则解决了问题的一半,但您还必须检查该值是否为0,因为这将评估为false。

var removeableIndex; // If we leave the variable undefined, it will evaluate false.
bookingStatus.bookings.filter(function(item, index) {
    if(item.id == id){
        removeableIndex = index;
        return true;
    }
    return false;
});
console.log(removeableIndex)
if(removeableIndex || removeableIndex === 0)
// If removeableIndex evaluates to true, or is equal to 0
    var result = bookingStatus.bookings.splice(removeableIndex,1);
    // remove the index

但是,您应该能够使用以下代码,因为Array.prototype.filter()根据回调函数的返回值返回一个数组

var result = bookingStatus.bookings.filter(function(item, index) {
    return item.id !== id;
});

答案 2 :(得分:0)

removeableIndex0时,评估if(removeableIndex)将为false,因为0是false-y值。所以,你应该按如下方式评估它,

if(removeableIndex >= 0)

或者要更加警惕,

var removeableIndex; //Leave the removeableIndex undefined.
//... Do what you are doing
if(type of removeableIndex != "undefined" && removeableIndex >= 0)

有关JavaScript中Truthy / Falsy值的更多信息,请访问: http://www.sitepoint.com/javascript-truthy-falsy/