【问题标题】:I want to merge values of a nested Json object with javascript:我想将嵌套 Json 对象的值与 javascript 合并:
【发布时间】:2022-11-23 05:13:57
【问题描述】:

那么如何像这样合并 Json 对象的值: {"zz0": "value 1","zz1": "value 2","zz2": "value 3"} 进入这个: {"key":["value 1","value 2","value 3"]} 在我的 javascript 表单中,这是第一个 Json 文件:

    [
        {
            "fotos": [
                {
                    "foto": "foto 1",
                    "zz0": "first line.",
                    "zz1": "second line.",
                    "zz2": "third line."
                },
                {
                    "foto": "foto 2",
                    "zz0": "first line."
                }
            ]
        }
    ]

这是第二个 Json 文件:

    [
        {
            "fotos": [
                {
                    "foto": ["foto 1"],
                    "tekst": ["first line.", "second line.", "third line."]
                },
                {
                    "foto": ["foto 2"],
                    "tekst": ["first line."]
                }
            ]
        }
    ]

使用地图和箭头功能搜索解决方案但卡住了......有什么想法吗?

【问题讨论】:

  • 你追求什么样的逻辑表达?您提供的示例在逻辑上不清晰,所有键都不同,那么您如何在逻辑上将键组合在一起?例如:{"zz0": "value 1","zz1": "value 2","zz2": "value 3"} 到这个:{"key":["value 1","value 2","value 3"]}
  • 键 'zz0'、'zz1' 和 'zz2' 应替换为 1 个键:'key' 并将它们的值放在一起作为 'key' 的值(在大示例中:'tekst')
  • 对象只包含一个属性foto和多个属性zz*吗?我的意思是,还有更多的属性吗?
  • 在“fotos”中,每个“foto”都有很多行“tekst”

标签: javascript arrays json array-merge


【解决方案1】:

const arr = [{ "fotos": [{ "foto": "foto 1", "zz0": "first line.", "zz1": "second line.", "zz2": "third line." }, { "foto": "foto 2", "zz0": "first line." }]}];

const ans = arr.map(({fotos}) => ({fotos: fotos.map(({foto, ...res}) =>({foto: [foto], tekst: Object.values(res)}))}));

console.log(Object.values(ans));

【讨论】:

  • 美丽,像魅力一样工作
【解决方案2】:

你可以像这样用 reduce 合并它们

const a = {a: 2, b: 3, c: 4}
Object.keys(a).reduce((acc, key) => {
    acc['key'].push(a[key])
    return acc
}, {'key': []})

这会给你{'key': [2, 3, 4]}

【讨论】:

    【解决方案3】:

    使用Array.map()Object.keys()Array.reduce()

    const data = [{
      "fotos": [{
          "foto": "foto 1",
          "zz0": "first line.",
          "zz1": "second line.",
          "zz2": "third line."
        },
        {
          "foto": "foto 2",
          "zz0": "first line."
        }
      ]
    }]
    
    const res = data[0].fotos.map(obj => {
      const tekst = Object.keys(obj).reduce((acc,key) => {
        if (key != 'foto') { acc.push(obj[key]) }
        return acc
      }, [])
      
      return { foto: [obj.foto], tekst: tekst }
    })
    
    console.log(res)

    【讨论】:

      【解决方案4】:

      以下将完成这项工作:

      const dat=[
          {
              "fotos": [
                  {
                      "foto": "foto 1",
                      "zz0": "first line.",
                      "zz1": "second line.",
                      "zz2": "third line."
                  },
                  {
                      "foto": "foto 2",
                      "zz0": "first line."
                  }
              ]
          }
      ];
      
      const res=dat[0].fotos.map(f=>({foto:f.foto,key:Object.entries(f).filter(a=>a[0]!='foto').map(a=>a[1])}));
      
      console.log(res);

      【讨论】:

        猜你喜欢
        • 2019-07-16
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 2023-01-29
        • 2021-11-17
        • 2016-03-16
        • 1970-01-01
        相关资源
        最近更新 更多