簡體   English   中英

在javascript foreach中使用數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM