我有一个问题。例如,公交车票价格。如果它来自
A
至B
,价格为300
B
至C
= 400
C
至D
= 200
D
至A
= 600
它是单向的(A
到B
到C
到D
到A
等等,它存储在两个选择框中
因此,1st
选择框用于来源,2nd
用于目的地。
如果我为第一个选择框选择A
而第二个选择C
,则应该向我收取费用700
(300 + 400
)。如果我从D
转到C
,则应向我收取费用1300
(600 + 300 + 400
)。如何用Javascript编写?这看起来很简单,但让我感到困惑。
以下是示例代码,但它只是从两个选择框中添加值。我想要的是添加具有单向流的值。例如,如果我从D
转到B
,则结果应为900
。感谢
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
p{
display: inline;
}
</style>
</head>
<body>
<p>From :</p>
<select name= "from">
<option value="2000">A</option>
<option value="5000">B</option>
<option value="3000">C</option>
<option value="10000">D</option>
</select>
<p>To :</p>
<select name= "to">
<option value="2000">A</option>
<option value="5000">B</option>
<option value="3000">C</option>
<option value="10000">D</option>
</select>
<button type="button" onclick="output();">Calculate</button><br>
<p id="result"></p>
<script type="text/javascript">
var result = document.getElementById('result');
function output(){
var sour = document.getElementsByName("from")[0].value;
var dest = document.getElementsByName("to")[0].value;
var price = 0;
var x;
for (x = 0; x < 4; x++) {
if (sour[x] != dest[x]){
price += parseInt(sour) + parseInt(dest);
result.innerHTML = price;
console.log (price);
}
}
}
</script>
</body>
</html>
答案 0 :(得分:0)
保持您的数据和您的表示形式分离始终是一个好主意(有完整的框架)。
在您的情况下,数据的分离将从<option value="val">
到javascript的价格作为保存不同区域的价格值的数据对象。
然后,您可以浏览此数据对象并创建总和
有关可能的实施,请参阅this fiddle。
如果有任何不清楚的地方,请随时在评论中提出
答案 1 :(得分:0)
我能想到的最简单的解决方案是在数组中设置标签/值对并进行处理:
var arr = [{
label: 'A',
val: 2000
}, {
label: 'B',
val: 5000
}, {
label: 'C',
val: 3000
}, {
label: 'D',
val: 10000
}, ];
function output() {
var sour = document.getElementsByName("from")[0].value;
var dest = document.getElementsByName("to")[0].value;
var res = arr.reduce(function(ac, x) {
//first you filter the objects in between sout and dest
if (x.label.charCodeAt() >= sour.charCodeAt() && x.label.charCodeAt() <= dest.charCodeAt())
return ac += x.val;
//else
return ac;
}, 0)
result.innerHTML = res;
console.log("res", res)
}
这个过程依赖于array.reduce,如果你是JS的新手,这是一个非常重要的数组处理方法。
答案 2 :(得分:0)
看看这个小提琴:https://jsfiddle.net/gxxpjy6j/
代码使用类似数据结构的图形,但可以轻松调整以使用完整的图形。代码也很容易理解。
<强> HTML 强>:
<body>
<p>From :</p>
<select name= "from">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<p>To :</p>
<select name= "to">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<button type="button" onclick="output();">Calculate</button><br>
<p id="result"></p>
</body>
<强>的Javascript 强>
var result = document.getElementById('result');
output = function output(){
var src = document.getElementsByName("from")[0].value;
var dst = document.getElementsByName("to")[0].value;
var curr = src;
var price = 0;
var x;
var adjList = {
'A': ['B', 2000],
'B': ['C', 5000],
'C': ['D', 3000],
'D': ['A', 10000],
}
while (curr != dst) {
price += adjList[curr][1];
curr = adjList[curr][0];
}
result.innerHTML = price;
}
希望这有帮助,即使不是选定的答案。