2016-07-21 3 views
0

У меня есть два объекта, как показано нижеConcatenate JS объекты

var data = { 
     site_name: "my_site", 
     page_id: "page_name", 
     city: "New York", 
     region_code: "NY", 
     country_code: "US" 
    }, 
    user_data = { 
     user: "user_name", 
     conversion_rate: 1.25 
    }; 

Я хочу, чтобы объединить эти два объекта, как показано ниже

user_data = { 
    user: "user_name", 
    conversion_rate: 1.25, 
    site_name: "my_site", 
    page_id: "page_name", 
    city: "New York", 
    region_code: "NY", 
    country_code: "US" 
}; 

Я сделал это зацикливание на секунду на проверив typeof user_data.key .... и он решил мою проблему, но мое любопытство заключается в том, чтобы сделать это, не зацикливаясь оптимизированным образом. Любое ваше предложение будет оценено по достоинству.

+0

я думаю продлить (цель [, object1] [, objectN]) является хорошим вариантом –

+0

Возможно дубликат [Как я могу объединить свойства Jquery в из двух объектов JavaScript динамически?] (http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically) –

ответ

3

Вы можете использовать Object.assign из ES6:

var combined = Object.assign({}, data, user_data); 

Или даже:

Object.assign(user_data, data); // this will change `user_data` 
+0

не поддерживается IE – Janie

+1

@trim IE6 не поддерживается IE. Вы должны использовать babel. –

+0

@trim IE поддерживает только очень ограниченное подмножество ES6. И, как сказал Дмитрий, вам нужно использовать транспилер, например [Babel] (https://babeljs.io), если вам нужно поддерживать устаревшие браузеры. – str

1

Если вы можете использовать Бабеля, просто использовать оператор распространения на объектах:

var data = { 
    site_name: "my_site", 
    page_id: "page_name", 
    city: "New York", 
    region_code: "NY", 
    country_code: "US" 
}, 
user_data = { 
    user: "user_name", 
    conversion_rate: 1.25 
}; 

var combined = { 
    ...data, 
    ...user_data 
}; 

console.log(combined); 

Пожалуйста, см the demo.

«Свойства спреда» по-прежнему находятся в стадии заявки 2, но вы можете use it with Babel.
См. here Подробнее об этой функции.

-1

Это будет работать в вашем примере случае на всех браузерах:

data=JSON.stringify(data); 
user_data=JSON.stringify(user_data); 
user_data=user_data.replace("}",data.replace("{",",")); 
user_data=JSON.parse(user_data);