我有以下(简化的)php函数,它为我计算总值。它基本上从wordpress数据库中获取一个项目数组,并检查每个项目的类型,然后将其值与特定的给定值进行比较,并对所有比较进行求和。
function total(){
$value1 = 10; // compare value for type 1 items
$value1 = 20; // type 2 items
$value1 = 30; // type 3 items
$total = 0; // reset total variable
global $wpdb;
$items = $wpdb->get_results("SELECT `item_type` as type, `item_value` as value FROM `table`"); // get all the items from database
foreach ($items as $item) {
// check which item type
switch ($item->type) {
case 1:
$total = $total + min($value1, $item->value);
break;
case 2:
$total = $total + min($value2, $item->value);
break;
case 3:
$total = $total + min($value3, $item->value);
break;
}}
return $total;
}
现在我想在javascript中重制相同的功能,所以我可以在表格中使用它进行计算。这是我到目前为止所得到的;
<SCRIPT type="text/javascript">
function calculate_total (){
var items = <?php echo json_encode($items); ?>;
var value1 = document.form.range1Input.value;
var value2 = document.form.range2Input.value;
var value3 = document.form.range3Input.value;
for each (var item in items){
switch (**(refer to item type in array)**) {
case 1:
total = total + min(value1, **(refer to item value in array)**);
break;
case 2:
total = total + min(value2, **(refer to item value in array)**);
break;
case 3:
total = total + min(value3, **(refer to item value in array)**);
break;
}}
document.form.total.value = total;
}
</script>
我如何引用items数组中的值?我希望有人能就这一点给我一些建议。
我也看到echo json_encode($items)
将数组格式化为{"type":"3","value":"1.00"},{"type":"1","value":"20.50"}
等等,我想知道这是否是javascript的可用格式,因为当我尝试total = items[1];
时,我看到{{1}在形式。
[Object Object]
的格式为$items = $pdb->get_results()
答案 0 :(得分:0)
您应该阅读JavaScript语法,但有四种方法可以循环遍历数组:
TL; DR:如果您正在做变异状态的事情,我建议Array#forEach
,如果没有,建议Array#map
。
var myArray = [1,2,3,4,5,6];
var len = myArray.length;
1)for loop
for (var i=0; i<len; i++) {
doSomethingTo(myArray[i]);
}
2)while循环
var i = 0;
while (i<len) {
doSomethingTo(myArray[i]);
i++;
}
3)forEach
myArray.forEach(function (element) {
doSomethingTo(element);
});
4)地图
var newArray = myArray.map(function (element) {
doSomethingTo(element);
});
在这四个中,只有map
才有回报。它将在数组的每个元素上运行您提供的函数,并返回所有这些元素的数组。 while
循环是最快的,但如果可以的话,你应该避免像这样强制执行。
答案 1 :(得分:0)
与您推测的一样,您的第一项可以称为items[0]
,其次是items[1]
,依此类推。
因此,在switch
语句/你的for循环中item
引用当前索引(0,1,2等),你可以说items[item]
来引用您当前在循环中查看的项目:首先它将等于items[0]
,然后是items[1]
,依此类推。
所以,switch (items[item].type) {
应该是你需要的。
(快速的JS回顾:JS中的数组和对象是不同的东西,如果你不确定,请查看差异。引用它们时,可以使用myArray[0]
从数组中获取内容,您可以使用myObject['myKey']
或myObject.myKey
从对象中获取内容。在您的情况下,items
是数组,其每个元素都是< strong>对象。因此,您可以items[0]['type']
或items[0].type
访问第一个项目的类型。
items[1]
在您尝试时显示[Object object]
的原因是因为浏览器在屏幕上显示对象并不是很好 - 对象就在那里,JS可以看到它,它就是&#39} ;只是大多数对象打印为[Object object]
。您最好显示JSON.stringify(items[1])
以将对象的JSON表示形式视为字符串。更好的是,尝试console.log(items)
或console.log(items[1])
在浏览器的控制台中查看整个对象(您可以搜索如何启动浏览器控制台,它&# 39;每个浏览器/操作系统都有所不同,但调试非常棒。