Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript foreach中使用数组_Javascript_Mysql_Arrays_Foreach_Json - Fatal编程技术网

在javascript foreach中使用数组

在javascript foreach中使用数组,javascript,mysql,arrays,foreach,json,Javascript,Mysql,Arrays,Foreach,Json,我有以下(简化的)php函数,它为我计算一个总值。它基本上从wordpress数据库中获取一个项目数组,检查每个项目的类型,然后将其值与特定的给定值进行比较,并将所有比较结果相加 function total(){ $value1 = 10; // compare value for type 1 items $value1 = 20; // type 2 items $value1 = 30; // type 3 items

我有以下(简化的)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>

函数计算_总计(){
var项目=;
var value1=document.form.range1Input.value;
var value2=document.form.range2Input.value;
var value3=document.form.range3Input.value;
对于每个(项目中的var项目){
开关(**(参考数组中的项目类型)**){
案例1:
总计=总计+最小值(值1,***(参考数组中的项目值)**);
打破
案例2:
总计=总计+最小值(值2,**(参考数组中的项目值)**);
打破
案例3:
总计=总计+最小值(值3,**(参考数组中的项目值)**);
打破
}}
document.form.total.value=总计;
}
如何引用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()
格式为
数组([0]=>stdClass对象([type]=>1[value]=>35.00)[1]=>stdClass对象([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循环

4) 地图


在这四个函数中,只有
map
具有返回值。它将在数组的每个元素上运行您赋予它的函数,并返回所有元素的数组。
while
循环是最快的,但是如果可以的话,你应该避免做那种强制性的事情。

正如你推测的,你的第一项可以称为
项[0]
,第二项可以称为
项[1]
,依此类推

因此,在您的
开关
语句/for循环中,
引用当前索引(0、1、2等),您可以说
项[item]
来引用您当前在循环中查看的项:首先它将等于
项[0]
,然后是
项[1]
,依此类推

所以,
开关(items[item].type){
应该是您所需要的


(JS快速回顾:数组和对象在JS中是不同的东西,如果不确定,请查找差异。引用它们时,可以使用
myArray[0]
从数组中获取东西,也可以使用
myObject['myKey']
myObject.myKey
从对象获取内容。在您的情况下,
items
是一个数组,其每个元素都是一个对象。因此,您可以执行
items[0]['type']
items[0]。键入
以访问第一个项目的类型)



当您尝试时,
items[1]
只是显示了
[Object Object]
,原因是浏览器不擅长在屏幕上显示对象–对象就在那里,JS可以看到它,只是大多数对象都打印为
[Object Object]
。您最好显示
JSON.stringify(items[1])
以字符串形式查看对象的JSON表示。更好的方法是尝试
console.log(items)
console.log(items[1])
以查看浏览器控制台中的整个对象(您可以搜索如何打开浏览器控制台,每个浏览器/操作系统的控制台都不同,但对于调试来说非常棒).

javascript端看起来像什么?第一个循环中的项是什么?嗨,约翰,谢谢你的评论。我不确定你的意思是什么?我对javascript几乎没有经验。我的意思是,当你从php发送到javascript时,数据是什么样子的?项包含什么..是json吗?数组吗?你能把它放进去吗也可以吗?谢谢:)尝试
total=items[1]。value
而不是
total=items[1];
print\r(items$)=Array([0]=>stdClass对象([type]=>1[value]=>35.00)[1]=>stdClass对象([type]=>3[value]=>1.00)[2]=>stdClass对象([type]=>1[value]=>20.50)etc etcHi Moshe,感谢您提供的信息!您能更具体地说明我如何将此用于我的案例吗?任何说明都会有所帮助:)
for (var i=0; i<len; i++) {
  doSomethingTo(myArray[i]);
}
var i = 0; 
while (i<len) {
  doSomethingTo(myArray[i]);
  i++;
}
myArray.forEach(function (element) {
  doSomethingTo(element);
});
var newArray = myArray.map(function (element) {
  doSomethingTo(element);
});