代码之家  ›  专栏  ›  技术社区  ›  Matts

将数组传递给jQuery每个函数以重新格式化数据

  •  0
  • Matts  · 技术社区  · 5 年前

    我有一组Json数据,需要重新格式化。

    数据作为1对象的一部分按行进行如下结构:

    "2019-12-27": Object{'a':'1', 'b':'2', 'c':'3', 'd':'4'} 
    

    我想解析每一行,使其与此(或数组)类似,并将所有行合并为一个对象:

    ["2019-12-27", "1", "2", "3", "4"]
    

    这是我尝试使用$的代码。每个函数都可以工作,但都失败了,因为数组不在内部函数的作用域内。- TypeError: parsed[count] is undefined 有没有办法把解析后的数组从外循环传递到内循环?

    parsed = [];
    var count = 0;
    $.each(data, function(k, outer) {
      count += 1;
      parsed[count][] = k;
      $.each(outer, function(i, inner) {
        parsed[count][] = i;
        });
    });
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Andreas    5 年前

    这不需要jQuery。 Object.entries() , Object.values() 以及 ... spread syntax 会做得很好:

    const input = {
       "2019-12-27": {'a':1, 'b':2, 'c':3, 'd':4}
      ,"2019-12-28": {'a':2, 'b':4, 'c':6, 'd':8}
    };
    const output = Object.entries(input)
                         .map(entry => [entry[0], ...Object.values(entry[1])]);
    
    console.log(output);
        2
  •  0
  •   Matt    5 年前

    不能使用短的C语法推送到数组 (list[] = val) . 您将寻找一个名为 push

    var x = []; // declare an array
    var myObject = { a: 1, b: 2 }; // Defining an example object
    var mySecondObject = { a: 3, b: 5 }; // another sample object
    x.push(myObject);
    x.push(mySecondObject);
    
    console.log(x);
    

    输出:

    [
        { a: 1, b: 2 },
        { a: 3, b: 5 }
    ]
    

    如果我们使用您提供的代码:

    var parsed = [];
    var count = 0;
    $.each(data, function(k, outer) {
      count += 1;
      parsed[count].push(k);
      $.each(outer, function(i, inner) {
        parsed[count].push(i);
        });
    });
    

    如果要允许push确定基于0的自动索引,则不一定需要count变量。