通过复制键和值将JSON对象值合并到Array [javascript]

时间:2018-12-05 02:35:31

标签: javascript jquery json lodash

我想合并一些具有相同键和值的值对象,在这种情况下,from flask import Flask,jsonify app = Flask(__name__) @app.route('/index') data={ 'name':'python', 'age':'18' } return jsonify(data) if __name__=="__main__": app.run(port=5555,debug=True) 是重复的,但具有不同的值。

json数据:

"field_template_id": 2

我希望是这样,仍然还有{ "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 ] } ] } ,但是值是array。

预期的json:

"field_template_id": 2

预先感谢

1 个答案:

答案 0 :(得分:0)

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)