Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script GoogleApps脚本函数,用于对不稳定工作的json数据进行非规范化_Google Apps Script - Fatal编程技术网

Google apps script GoogleApps脚本函数,用于对不稳定工作的json数据进行非规范化

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,

我有一个反规范化json数据的函数。 Json数据如下所示:

-条目 -入口 -SKU

我想做的是创建一个对象数组,其中超过1个sku的条目应该重复x次,其中x是sku的数量(sku数组的长度);每次切换SKU的数据时

问题在于sku数据不会切换,相同的sku会在结果数组中多次显示。 当我一步一步地调试时,数组在开始时被很好地追加,但是当函数继续运行时,正确追加的数组元素被覆盖

以下是功能代码:

    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));