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

Posted

技术标签:

【中文标题】将数组传递给 jQuery 每个函数以重新格式化数据【英文标题】:Pass array to jQuery each function to reformat data 【发布时间】:2020-04-17 11:57:39 【问题描述】:

我有一个需要重新格式化的 Json 数据集。

作为 1 个对象的一部分,数据的结构是这样的:

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

我想解析每一行,使其像这样(或数组)并将所有行组合成一个对象:

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

这是我尝试使用 $.each 函数的代码,它大部分都有效,但由于数组来自内部函数的范围之外而失败。 - 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;
    );
);

【问题讨论】:

使用适当的语法更容易理解数据。看起来您正在从控制台复制和粘贴。如果是这种情况,请使用 console.log(JSON.stringify(obj, null, 2)) 并将其输出复制/粘贴到您的问题中。 另外,JSON 是一种文本格式;你所拥有的只是对象的一部分。 我的意思是它是一个数组或列表。我会编辑它 【参考方案1】:

你不需要 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);

【讨论】:

为什么是DV?如果我确实错过了应该改进或删除的东西,只是好奇?【参考方案2】:

您不能使用简写 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 变量。

【讨论】:

仍然收到TypeError: parsed[count] is undefined 我编辑了答案。我们忘记使用 var 关键字声明 parsed。我的错。

以上是关于将数组传递给 jQuery 每个函数以重新格式化数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 对象内的 JSON 数组传递给 jQuery 自动完成

将php数组传递给jquery函数

提示用户输入 .gs 函数中的范围,将数组传递给 html 脚本并重新关注 HTML 对话框

将数组从jquery传递给python函数时如何设置url?

将 PHP $_POST 数组传递给 javascript/jQuery 以通过 ajax 发送回 PHP

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器