[英]use array in javascript foreach
我有以下(簡化)的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];
我在表格中看到[Object Object]
。
$items = $pdb->get_results()
被格式化為Array ( [0] => stdClass Object ( [type] => 1 [value] => 35.00 ) [1] => stdClass Object ( [type] => 3 [value] => 1.00 )
您可能應該閱讀JavaScript語法,但是有四種方法可以遍歷數組:
TL; DR:如果您正在做會改變狀態的事情,我建議您使用Array#forEach
,否則,建議使用Array#map
。
var myArray = [1,2,3,4,5,6];
var len = myArray.length;
1)for循環
for (var i=0; i<len; i++) {
doSomethingTo(myArray[i]);
}
2)while循環
var i = 0;
while (i<len) {
doSomethingTo(myArray[i]);
i++;
}
3)每次
myArray.forEach(function (element) {
doSomethingTo(element);
});
4)地圖
var newArray = myArray.map(function (element) {
doSomethingTo(element);
});
在這四個圖中,只有map
才有回報。 它將在數組的每個元素上運行您賦予它的函數,並一起返回所有這些元素的數組。 while
循環是最快的,但是如果可以的話,您應該避免強制執行這樣的操作。
就像您推測的那樣,您的第一個項目可以稱為items[0]
,第二個項目可以稱為items[1]
,依此類推。
因此,在您的for循環中的switch
語句中/其中item
引用當前索引(0、1、2等),您可以說items[item]
引用您當前在循環中查看的項目:首先它將等於items[0]
,然后等於items[1]
,依此類推。
因此, switch (items[item].type) {
應該是您所需要的。
(快速的JS概述:JS中的數組和對象是不同的東西,如果不確定,請查找差異。引用它們時,可以使用myArray[0]
從數組中獲取內容,也可以使用myObject['myKey']
或myObject.myKey
來從對象中獲取內容。在您的情況下, items
是一個數組 ,其每個元素都是一個對象,因此可以執行items[0]['type']
或items[0].type
訪問您的第一項的類型)。
嘗試使用items[1]
只顯示[Object object]
的原因是因為瀏覽器不太擅長在屏幕上顯示對象-該對象在那里,而JS可以看到它,只是大多數對象都被打印為[Object object]
。 您最好顯示JSON.stringify(items[1])
以將對象的JSON表示形式顯示為字符串。 更妙的是,嘗試使用console.log(items)
或console.log(items[1])
在瀏覽器控制台中查看整個對象(您可以搜索如何打開瀏覽器控制台,每個瀏覽器/ OS都不一樣,但非常適合調試)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.