Google apps script GoogleApps脚本函数,用于对不稳定工作的json数据进行非规范化
我有一个反规范化json数据的函数。 Json数据如下所示: -条目 -入口 -SKU 我想做的是创建一个对象数组,其中超过1个sku的条目应该重复x次,其中x是sku的数量(sku数组的长度);每次切换SKU的数据时 问题在于sku数据不会切换,相同的sku会在结果数组中多次显示。 当我一步一步地调试时,数组在开始时被很好地追加,但是当函数继续运行时,正确追加的数组元素被覆盖 以下是功能代码:Google apps script GoogleApps脚本函数,用于对不稳定工作的json数据进行非规范化,google-apps-script,Google Apps Script,我有一个反规范化json数据的函数。 Json数据如下所示: -条目 -入口 -SKU 我想做的是创建一个对象数组,其中超过1个sku的条目应该重复x次,其中x是sku的数量(sku数组的长度);每次切换SKU的数据时 问题在于sku数据不会切换,相同的sku会在结果数组中多次显示。 当我一步一步地调试时,数组在开始时被很好地追加,但是当函数继续运行时,正确追加的数组元素被覆盖 以下是功能代码: let data = [ { name: 'a', skus: [1,
let data = [
{
name: 'a',
skus: [1, 2],
},
{
name: 'b',
skus: [3, 4],
},
{ name: 'c', skus: [5] },
{ name: 'd', skus: [6, 7, 8] },
];
function flatten(data) {
let newArray = [];
for (i in data) {
const el = {};
el.name = data[i].name;
let skus = data[i].skus;
for (j in skus) {
el.sku = skus[j];
newArray.push(el);
console.log(el);
}
}
return newArray;
}
我试图实现的是返回一个新数组,它是这样的:
[
{ name: a,
sku: 1
},
{ name: a,
sku: 2
},
{
name: b,
sku: 3,
},
{
name: b,
sku: 4,
}... and so on ]
谢谢- 您希望实现以下转换
- 从
const data = [ {name: 'a', skus: [1, 2]}, {name: 'b', skus: [3, 4]}, {name: 'c', skus: [5]}, {name: 'd', skus: [6, 7, 8]}, ];
- 到
[ {"name": "a", "sku": 1}, {"name": "a", "sku": 2}, {"name": "b", "sku": 3}, {"name": "b", "sku": 4}, , , , ]
- 从
- 我认为你的问题是由于参考电话引起的。当对象
通过el
放入数组时,newArray.push(el)
会被下一个循环更改。由此,我认为你的问题出现了。在这种情况下,需要复制对象并放入数组el
let数据=[
{name:'a',SKU:[1,2]},
{名称:'b',SKU:[3,4]},
{名称:'c',SKU:[5]},
{名称:'d',SKU:[6,7,8]},
];
函数展平(数据){
设newArray=[];
对于(数据中的i){
常数el={};
el.name=数据[i]。名称;
设skus=data[i].skus;
用于(单位:SKU){
el.sku=sku[j];
push(Object.assign({},el));
//控制台日志(el);
}
}
返回新数组;
}
console.log(展平(数据))
……简化函数,使其完整并提供测试数据。@Cooper我编辑了发布的代码,您可以在上面找到简化的vs。此代码返回新数组,如下所示:[{name:a,sku:2},{name:a,sku 2},{name:b,sku:4},{name:b,sku:4},…]。因为sku始终是最后添加的sku元素。
newArray.push(el);
newArray.push(Object.assign({}, el));