【问题标题】:Javascript, how to transform array row to object fieldsJavascript,如何将数组行转换为对象字段
【发布时间】:2022-12-17 18:17:14
【问题描述】:

我需要改造这个结构:

[
{"Field1": "value11", "Field2":"value21", "CField1":[{"Id": 1, "Value":"myValue11", "Flag":"Y"}, {"Id": 2, "Value":"myValue12", "Flag":"n"}]},
{"Field1": "value21", "Field2":"value22", "CField1":[{"Id": 1, "Value":"myValue21", "Flag":"Y"}, {"Id": 2, "Value":"myValue22", "Flag":"n"}]}
]

[
{"Field1": "value11", "Field2":"value12", "Value1": "myValue11", "Flag1":"Y", "Value2": "myValue12", "Flag2":"n"},
{"Field1": "value21", "Field2":"value21", "Value1": "myValue21", "Flag1":"Y", "Value2": "myValue22", "Flag2":"n"},
]

我发现了类似的解决方案:

tab.forEach(function (item) {
  transformedObject[item.key] = transformedObject[item.key] ? `${transformedObject[item.key]}, ${item.value}` : item.value;
});

console.log(transformedObject);

// Access the '2' property
console.log(transformedObject['2']);

但需要一些帮助来适应我的情况

谢谢

【问题讨论】:

    标签: javascript transformation


    【解决方案1】:

    您可以将内部数组映射为新对象。

    const
        data = [{ Field1: "value11", Field2: "value21", CField1: [{ Id: 1, Value: "myValue11", Flag: "Y" }, { Id: 2, Value: "myValue12", Flag: "n" }] }, { Field1: "value21", Field2: "value22", CField1: [{ Id: 1, Value: "myValue21", Flag: "Y" }, { Id: 2, Value: "myValue22", Flag: "n" }] }],
        result = data.map(({ CField1, ...o }) => Object.assign(
            o,
            ...CField1.map(({ Id, ...q }, i) => Object.fromEntries(Object
                .entries(q)
                .map(([k, v]) => [k + (i + 1), v])
            ))
        ));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      您可以像这样映射您的数据:

      data = [
      {"Field1": "value11", "Field2":"value21", "CField1":[{"Id": 1, "Value":"myValue11", "Flag":"Y"}, {"Id": 2, "Value":"myValue12", "Flag":"n"}]},
      {"Field1": "value21", "Field2":"value22", "CField1":[{"Id": 1, "Value":"myValue21", "Flag":"Y"}, {"Id": 2, "Value":"myValue22", "Flag":"n"}]}
      ]
      
      console.log(data.map(function(value, key) {
        return Object.entries(value).reduce(function(carry, [ key, value ]) {
          if (key !== 'CField1') {
            carry[key] = value
          } else {
            carry = Object.assign(carry, value.reduce(function(innerCarry, value, key) {
               innerCarry[`Flag${value.Id}`] = value.Flag
               innerCarry[`Value${value.Id}`] = value.Value
               return innerCarry;
            }, {}))
          }
          return carry
        }, {})
      }))

      【讨论】:

        猜你喜欢
        • 2015-01-13
        • 2011-04-21
        • 1970-01-01
        • 2015-12-10
        • 2023-02-06
        • 2019-10-22
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        相关资源
        最近更新 更多