【问题标题】:Merge JSON object value to Array by it duplicate key and value [javascript]通过重复键和值将 JSON 对象值合并到数组 [javascript]
【发布时间】:2018-12-05 02:35:31
【问题描述】:

我想合并一些具有相同键和值的值对象,在这种情况下"field_template_id": 2 是重复的但具有不同的值。

json 数据:

{
  "id": "c2dec94f",
  "data": [
    {
      "field_template_id": 1,
      "value": "111"
    },
    {
      "field_template_id": 2,
      "value": 222
    },
    {
      "field_template_id": 2,
      "value": 444
    },
    {
      "field_template_id": 3,
      "value": [
        333
      ]
    }
  ]
}

我预计会是这样,还有"field_template_id": 2但是值是数组。

预期的 json :

{
  "id": "c2dec94f",
  "data": [
    {
      "field_template_id": 1,
      "value": "111"
    },
    {
      "field_template_id": 2,
      "value": [
        222, 444
      ]
    },
    {
      "field_template_id": 3,
      "value": [
        333
      ]
    }
  ]
}

提前致谢

【问题讨论】:

  • 你试过什么?尝试自己解决这个问题。

标签: javascript jquery json lodash


【解决方案1】:

const json = {
    "id": "c2dec94f",
    "data": [
        {
            "field_template_id": 1,
            "value": "111"
        },
        {
            "field_template_id": 2,
            "value": 222
        },
        {
            "field_template_id": 3,
            "value": [
                333
            ]
        },
        {
            "field_template_id": 2,
            "value": 444
        }
    ]
}
const data = json.data

let obj = {}
let arr = []
data.forEach(item => {
    if (obj[item.field_template_id]) {
        arr.some((val, key) => {
            const newItem = arr[key]
            if (val.field_template_id === item.field_template_id) {
                if (Array.isArray(newItem.value) && Array.isArray(item.value)) {
                    newItem.value = newItem.value.concat(item.value)
                } else if (Array.isArray(newItem.value)) {
                    newItem.value.push(item.value)
                } else if (Array.isArray(item.value)) {
                    item.value.unshift(newItem.value)
                } else {
                    const result = []
                    result.push(newItem.value)
                    result.push(item.value)
                    newItem.value = result
                }
                return true
            } else {
                return false
            }
        })
    } else {
        obj[item.field_template_id] = true
        arr.push(item)
    }
})

const result = {
    id: json.id,
    data: arr
}

console.log(result)

【讨论】:

    猜你喜欢
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2011-10-18
    • 2020-07-04
    • 2018-10-22
    • 2020-09-08
    相关资源
    最近更新 更多