2016-03-08 5 views
0

У меня есть два объекта JavaScript со структурой ниже.Как конкатрировать два объекта JavaScript с JavaScript

var obj1 = {id1: 10, name1: "stack"}; 
var obj2 = {id2: 20, name2: "overflow"}; 

Я хочу Concat их вместе, как одного объекта (не массив) с помощью Javascript.

Результат должен быть таким.

var res = {id: 10, name1: "stack", id2: 20, name2: "overflow"}; 

Есть ли простой способ сделать это, используя чистый javascript?

Примечание: Мне не нужен jQuery, и я хочу, чтобы concat был для объектов json, а не как json-массивы с использованием метода concat. Есть ли простой способ или способ достичь этого?

+1

В ES6 вы можете использовать 'Object.assign'. Например: 'Object.assign ({}, obj1, obj2)' –

+1

Предупреждение о адвокации языка, это на самом деле объектные литералы. Да, они могут быть JSON, но ключевым отличием является JSON-ключи, которые должны быть строками. –

+0

По другому: в этом вопросе нет JSON. JSON - текстовая нотация для обмена данными. Если вы имеете дело с исходным кодом JavaScript и не имеете дело с * строкой *, вы не имеете дело с JSON. –

ответ

3

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

var obj1 = {a: 1}, obj2 = {b:2} 
// Using three arguments so that obj 1 and 2 aren't modified 
var result = Object.assign({}, obj1, obj2); 
// result.a -> 1 
// result.b -> 2 
// obj1.b -> undefined 
// obj2.a -> undefined 

// You could modify obj1 
Object.assign(obj1, obj2); 
// obj1.b -> 2 

Polyfill:

if (typeof Object.assign != 'function') { 
    (function() { 
    Object.assign = function (target) { 
     'use strict'; 
     if (target === undefined || target === null) { 
     throw new TypeError('Cannot convert undefined or null to object'); 
     } 

     var output = Object(target); 
     for (var index = 1; index < arguments.length; index++) { 
     var source = arguments[index]; 
     if (source !== undefined && source !== null) { 
      for (var nextKey in source) { 
      if (source.hasOwnProperty(nextKey)) { 
       output[nextKey] = source[nextKey]; 
      } 
      } 
     } 
     } 
     return output; 
    }; 
    })(); 
} 
+0

Спасибо Хуан! в чем разница между использованием результата var result = Object.assign ({}, obj1, obj2); и var result = Object.assign (obj1, obj2); оба дают одинаковый результат –

+0

@UI_Dev: Как говорится в комментарии в его ответе: последнее изменяет 'obj1'. Первый - нет. –

+0

Комментарии должны быть ясными? –

0

Простой равнину решение:

function addToObject(source, target) { 
 
    Object.keys(source).forEach(function (k) { 
 
     target[k] = source[k]; 
 
    }); 
 
} 
 

 
var obj1 = { id1: 10, name1: "stack" }, 
 
    obj2 = { id2: 20, name2: "overflow" }, 
 
    result = {}; 
 

 
addToObject(obj1, result); 
 
addToObject(obj2, result); 
 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');