我正在开发angularjs项目。我需要帮助创建一个函数,该函数将单个值映射到包含范围和返回的json数据数组,即如果value在该范围内,则为该范围分配相应的返回值。如何在javascript中使用查找功能实现此目的。我正在使用的json表的一个例子是:
[{"LI":"05:0","LS":null,"points":0},
{"LI":"04:00","LS":"05:00","points":3},
{"LI":"03:00","LS":"4:00","points":4},
{"LI":null,"LS":"3:00","points":4}
]
基本上,如果值>> = 5.00则返回0,如果值>> 4.00且值<1。 5.00 ,,返回3.
该函数接收json表和要查找的值,然后返回与该间隔对应的点。
答案 0 :(得分:0)
如果有人发现它有用,我的最终代码如下:
var app = angular.module('JsonMapping', []);
app.controller('MainCtrl', function($scope) {
$scope.Model = {
Value: 10,
Result: 0,
ReferenceTable: [{"LI":85,"LS":null,"points":15},{"LI":84,"LS":85,"points":14},{"LI":83,"LS":84,"points":13},{"LI":82,"LS":83,"points":12},{"LI":81,"LS":82,"points":11},{"LI":80,"LS":81,"points":10},{"LI":78,"LS":80,"points":8},{"LI":76,"LS":78,"points":6},{"LI":74,"LS":76,"points":4},{"LI":72,"LS":74,"points":2},{"LI":70,"LS":72,"points":1},{"LI":null,"LS":70,"points":0}]
}
$scope.GetPointsForValue = function() {
var lowerLimit = 0, upperLimit = 0, points = 0.0;
for (var i = $scope.Model.ReferenceTable.length - 1; i >= 0; i--) {
lowerLimit = $scope.Model.ReferenceTable[i].LI;
upperLimit = $scope.Model.ReferenceTable[i].LS;
if(lowerLimit === null && parseFloat($scope.Model.Value) < upperLimit) {
$scope.Model.Result = $scope.Model.ReferenceTable[i].points;
break;
}else if (upperLimit === null && parseFloat($scope.Model.Value) >= lowerLimit) {
$scope.Model.Result = $scope.Model.ReferenceTable[i].points;
break;
}else if (upperLimit > parseFloat($scope.Model.Value) && parseFloat($scope.Model.Value) >= lowerLimit){
$scope.Model.Result = $scope.Model.ReferenceTable[i].points;
break;
}
}
};
});
<!DOCTYPE html>
<html ng-app="JsonMapping">
<head>
<meta charset="utf-8" />
<title>Map value to Json Array</title>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script data-require="angular.js@1.5.x" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<input type="number" ng-model="Model.Value" ng-change="GetPointsForValue()">
<p>Points for value = {{Model.Result}}
</body>
</html>