我正在使用DataTables库,因此很难以适当的格式接收数据,因此我试图在DataTable库尝试将数据提取到表中之前进行调整。我有一个ajax调用,它返回以下格式的对象:
data:[ [{ Key: "SomeKey" , Value: "SomeValue" } , { ...} ],[...] ]
我想要的输出是:data:[ [{ "SomeKey":"SomeValue" } , { ...} ],[...] ]
我尝试了JSON.stringify或eval方法,但是没有用,当返回类型是某种字符串时,我也尝试了这两种方法,但是它在\
之前插入了"
,所以它没有转换为json。任何帮助或良好的轨道,将不胜感激。
答案 0 :(得分:3)
您应该查看Array.prototype.map
(mdn)
let data = [[{Key: "SomeKey", Value: "SomeValue"}]];
let output = data.map(a => a.map(({Key, Value}) => ({[Key]: Value})));
console.log(output);
请注意[Key]
语法。简而言之,尽管var x = 'key'; y = {x: 3}
将分配对象{x: 3}
,而x = 'key'; y = {[x]: 3}
将分配对象{key: 3}
。
如果您实际上接收到字符串"data:[ [{ Key: "SomeKey" , Value: "SomeValue" } , { ...} ],[...] ]"
,则可以修剪前5个字符(“数据:”),然后使用JSON.parse
。
答案 1 :(得分:3)
这与JSON无关。 :-)
data
显然是对象数组的数组,其中每个对象都具有称为Key
和Value
的属性。
如果要创建对象数组的新数组,其中对象具有一个由Key
值命名的属性,其值为Value
,则可以执行以下操作:< / p>
data = data.map(a => a.map(({Key,Value}) => ({[Key]: Value})));
在数组(外部数组和内部数组)上使用map
和destructuring从子数组中的每个对象中选取Key
和Value
属性,并使用computed property names设置新对象的属性名称。
在ES5和更早的版本中,看起来像这样:
data = data.map(function(a) {
return a.map(function(obj) {
var newObj = {};
newObj[obj.Key] = obj.Value;
return newObj;
});
});