为什么不删除下面的数组。
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)
我想知道为什么第一组代码只有在零索引时才删除该项。
答案 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)
当removeableIndex
为0
时,评估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/