Как объединить 2 объекта, взятые входным значением - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть два объекта JSON, и я хочу объединить их:

Object1: {"9":{"322":{"option0":"177"}}}
Object2: {"10":{"323":{"option":"456"}}}

И я хочу, чтобы конечный результат был похож на:

{
    "9": {
        "322": {
            "option0": "177"
        }
    },
    "10": {
        "323": {
            "option": "456"
        }
    }
}

Я попытался использовать конкат метод, но результат таков:

{
    "9":{
        "322":{
            "option0":"177"
        }
    }
}
{
    "10":{
        "323":{
            "option":"456"
        }
    }
}

PS: объекты берутся при вводе так:

var object1 = $('input').val();

Ответы [ 4 ]

0 голосов
/ 20 сентября 2018

ES6 way:

const object1 = {"9":{"322":{"option0":"177"}}}
const object2 = {"10":{"323":{"option":"456"}}}

const object3 = { ...object1, ...object2 }

console.log(object3)

Codepen:

https://codepen.io/anon/pen/eLxBdK?editors=0001

Используйте синтаксис ES6 всякий раз, когда это возможно.

  • более короткий код
  • обычно более читабельный
  • этот случай, в частности, позволяет легко выполнять глубокие слияния (что раньше было болью)
  • быстрее
0 голосов
/ 20 сентября 2018

На самом деле это objects, а не JSON Arrays, и вы получили array в результате, потому что Array#concat() вернет array, а вы хотите object.

То, что вы можете сделать, это использовать Object.assign() метод :

let obj = Object.assign({}, JSON.parse(o1), JSON.parse(o2));

Примечание:

Есливы берете эти объекты из input, вы будете получать их как strings, вам нужно проанализировать их с помощью JSON.parse(), чтобы получить право objects.

let o1  = '{"9":{"322":{"option0":"177"}}}';
let o2 =  '{"10":{"323":{"option":"456"}}}';

let obj = Object.assign({}, JSON.parse(o1), JSON.parse(o2));

console.log(obj);
0 голосов
/ 20 сентября 2018

Поскольку вы получаете значения из текстового поля, они изначально будут строками JSON.Для того, чтобы обращаться с ними как с объектами и объединять их, вам нужно сначала проанализировать их.Затем вы можете получить желаемый результат, используя метод jQuery $.extend(), который объединяет один объект в другой.

Демо:

var obj1 = JSON.parse($("#obj1").val());
var obj2 = JSON.parse($("#obj2").val());
var merged= $.extend({}, obj1, obj2);
console.log(merged);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="obj1" value='{"9":{"322":{"option0":"177"}}}'/>
<input type="text" id="obj2" value='{"10":{"323":{"option":"456"}}}'/>

Документация: https://api.jquery.com/jquery.extend/

0 голосов
/ 20 сентября 2018

Использование Object.assign()

const Array1 = {"9":{"322":{"option0":"177"}}}
const Array2 = {"10":{"323":{"option":"456"}}}

let newObject = Object.assign({}, Array1, Array2);

console.log(newObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...