多维Obj或数组

时间:2017-03-21 14:44:09

标签: jquery arrays object

我需要多维数组或对象的帮助。

这是我的代码:

let Calcoli = {};

$(document).ready(function() {
  add_array("Home",  '+', 15, "");
  add_array("Car",   '+', 15, "");
  add_array("Music", '+', 40, 0);
  add_array("Music", '+', 50, 1);
  debug_obj(Calcoli);
});

function add_array(keys, op, value, i) {
  if (i != ""){
    if (isNaN(Calcoli[keys][i])) {          
      Calcoli[keys] = [];
      Calcoli[keys][i] = 0;
    }
    if (op == "+") { 
        Calcoli[keys][i] += value;
    }
  } else {
    if (op == "+") {
      Calcoli[keys] += value;
    }
  }
}

function debug_obj(item) {
  console.log(item);
}  

结果是:

{"Home":30,"Car":15,"Music":[null,50]} 

我需要

{"Home":30,"Car":15,"Music":[40,50]} –

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 您没有初始化else案例中的值,因此您要添加未定义的数字,获取NaN
  2. if (i != 0)实际上会在i == ""时失败,因为它们都是“假的”并且会比较为等。
  3. 在需要时初始化所有对象,以类型安全的方式检查您的值,并跳过一些if s ...

    let Calcoli = {};
    
    add_array("Home", '+', 15, "");
    add_array("Car", '+', 15, "");
    add_array("Music", '+', 40, 0);
    add_array("Music", '+', 50, 1);
    debug_obj(Calcoli);
    
    function add_array(keys, op, value, i) {
      if (i !== "") {
        Calcoli[keys] = Calcoli[keys] || []
        Calcoli[keys][i] = Calcoli[keys][i] || 0
        
        if (op == "+") {
          Calcoli[keys][i] += value;
        }
      } else {
        Calcoli[keys] = Calcoli[keys] || 0
    
        if (op == "+") {
          Calcoli[keys] += value;
        }
      }
    }
    
    function debug_obj(item) {
      console.log(item);
    }