更好的检查数组中两项之间的方法
Better method for checking between two items in array
我有一个像这样的数组:
var data = [
{
"title" : "Title 1",
"slideText" : "",
"startTime" : 0
},
{
"title" : "Title 2",
"slideText" : "",
"startTime" : 60
},
{
"title" : "Title 3",
"slideText" : "",
"startTime" : 120
}
];
我在HTML5视频上有一个seeked
事件监听器。当用户搜索时,我需要检查他们在哪里,并确定他们在数组中的哪个索引上。例如,它们查找72秒,它们将在数组[1]
现在我有这个:
player.addEventListener("seeked", function(event)
{
currentTime = player.currentTime;
angular.forEach($scope.data, function(value, key)
{
if (currentTime >= $scope.data[key].startTime && currentTime <= $scope.data[key + 1].startTime)
{
$scope.$apply(function()
{
$scope.setActive(key);
});
}
});
});
这一切都工作,直到寻找的时间到达数组的末尾,$scope.data[key + 1].time
是未定义的。我该如何处理这个问题?我现在心不在焉,我还没喝咖啡:|
编辑
new function working
player.addEventListener("seeked", function(event)
{
currentTime = player.currentTime;
for (var i = 0; i <= $scope.data.length; i++)
{
if ($scope.data[i + 1] != undefined)
{
if (currentTime < $scope.data[i + 1].startTime)
{
$scope.$apply(function()
{
$scope.setActive(i);
});
break;
}
}
else
{
$scope.$apply(function()
{
$scope.setActive($scope.data.length - 1);
});
}
}
});
首先测试数组元素是否存在。如果失败,其他测试将被忽略:
if ($scope.data[key+1] && currentTime>=$scope.data[key].startTime && currentTime<=$scope.data[key+1].startTime)
您需要检查[key + 1]
,以确保您不会尝试访问超出数组长度的元素。
player.addEventListener("seeked", function(event)
{
currentTime = player.currentTime;
angular.forEach($scope.data, function(value, key)
{
if ( ($scope.data[key+1] != undefined) && currentTime < $scope.data[key+1].startTime)
{
// this is the one we are after
return false; // exit foreach
} else {
// we are on the last one.
}
});
});
这是最终的解决方案
player.addEventListener("seeked", function(event)
{
currentTime = player.currentTime;
for (var i = 0; i <= $scope.data.length; i++)
{
if ($scope.data[i + 1] != undefined)
{
if (currentTime < $scope.data[i + 1].startTime)
{
$scope.$apply(function()
{
$scope.setActive(i);
});
break;
}
}
else
{
$scope.$apply(function()
{
$scope.setActive(i - 1);
});
}
}
});
相关文章:
- 这两种方法有什么不同
- 通过两种方法创建和更新 CSS
- 为什么我在 Angular JS 中收到两个方法调用
- 声明Javascript名称空间的两种方法之间的区别
- Dojo和RequireJS:Error:defineAlreadyDefined(…)在站点上同时使用这两种方法时
- 处理jQuery提交表单的两种方法
- 在完成另外两个方法之后调用一个方法
- 定义 ES6 React 组件的两种方法
- 如何将两个方法合并为一个(.style + .getcomputed 样式)
- 选择的 Javascript 项方法
- 在承诺链中调用两种方法
- 如何使用 sinon 存根/模拟从“超类”复制的依赖项方法
- 这两种方法在javascript类中定义方法的区别
- 确定对象是否在JavaScript中具有属性的两种方法
- 加载JS库的两种方法
- 在Javascript中定义对象方法的两种方法之间有什么区别
- 使用以下两种方法定义的方法之间的差异
- 在 Javascript 中创建“私有”属性的这两种方法之间的区别
- 在javascript中连接两个方法调用
- 更好的检查数组中两项之间的方法