如何检查数组对象值的相等性(假设我试图添加新的日期和时间,与旧的相同),当我有名为orderInfo的数组时,我是否需要使用'indexOf '或'angular.equals'方法?
我如何从数组中检查,因为这些传递了if语句?
$scope.orderInfo = [{date: '11.11.2011', time: 8},
{date: '11.11.2005', time: 8}];
if($ scope.orderInfo.indexOf(time)=== -1){
$scope.orderInfo.push({date: pvmr, time: aikas});
$scope.errortextt = "info added";
} else {
$scope.errortextt = "already on list";
}
或
$scope.containsObject = function (orderInfo, time) {
var i;
for (i = 0; i < orderInfo.length; i++) {
if (angular.equals(orderInfo[i], time)) {
$scope.errortextt = "already on list";
return true;
}
}
$scope.orderInfo.push({date: pvmr, time: aikas});
$scope.errortextt = "info added";
return false;
};
答案 0 :(得分:0)
你应该采用第二种方法:
angular.equals(obj1,obj2);
答案 1 :(得分:0)
indexOf
只有在数字或字符串数组不是对象的情况下才有效,除非您实际为它提供了对数组中对象的引用(不是具有相同值的对象)。 angular.equals函数将分别检查对象属性的相等性,以确定它们是否相等&#34;。
个人认为解决这个特定问题的最佳方法是使用另一个对象作为&#34;哈希映射&#34;为了确定你是否有价值,这种方式无需循环或进行深度比较,唯一的困难是提出你独特的关键&#34;用于存储/检查值,例如:
var orderInfoIndex = {};
$scope.containsObject = function (orderInfo, time) {
if (orderInfoIndex[time.toString()]) {
$scope.errortextt = "already on list";
return true;
}
orderInfoIndex[time.toString()] = true;
$scope.orderInfo.push({date: pvmr, time: aikas});
$scope.errortextt = "info added";
return false;
};
答案 2 :(得分:0)
我使用.containsObject()函数来检查,你不能多次添加相同的日期,时间。这个解决方案与一个按钮完美配合,但我有这样的按钮阵列:
$scope.times = [8, 9, 10];
HTML
<ul>
<li class="items" ng-repeat="time in times">
<button class="button" ng-click="containsObject(time, date)">{{time}}</button>
</li>
</ul>
&#39; date&#39;是一个约会对象。
问题: 当添加对象并检查与containsObject()的相等性时,它会正确添加项目,直到所有&#39; -arrays数字&#39;已被添加&#39;。然后它只按一个时间/日期组合列出每个日期,并说休息,他们已经在列表中,即使他们不是。
$scope.orderInfoIndex{};
$scope.containsObject = function (aikas, pvmr) {
if ($scope.orderInfoIndex[pvmr] && $scope.orderInfoIndex[aikas]) {
$scope.errortextt = "already on list";
return true;
}
$scope.orderInfo.push({date: pvmr, clock: aikas});
$scope.orderInfoIndex[pvmr] = true;
$scope.orderInfoIndex[aikas] = true;
$scope.errortextt = "info added";
return false;
};
实施例:
{date:"2016-09-29T09:00:00.000Z","clock":8},
{date:"2016-09-29T09:00:00.000Z","clock":9},
{date:"2016-09-29T09:00:00.000Z","clock":10}
然后当我更改日期(29-> 30)时,我只能推送一个对象:
{date:"2016-09-30T09:00:00.000Z","clock":8}
如果我尝试将其他对象推送到同一日期,使用不同的时钟,则不允许并且已经在列表中说“
问题: 1.如何将时间数组与日期更改结合起来,以便根据您选择的日期一起检查时间,日期?
奖励:我如何反向/删除特定选择,所以我返回正确的日期时间按钮值?