objects array javascript object ecmascript-5 ecmascript-harmony

javascript - objects - object.assign array



ES5 Object.assign equivalente (2)

En underscore.js puedes usar como,

_.extend(firstObj, secondObj);

En jQuery, puedes usar,

$.extend({},firstObj,secondObj);

En javascipt puro, puede combinar n cantidad de objetos utilizando esta función:

function mergeObjects() { var resObj = {}; for(var i=0; i < arguments.length; i += 1) { var obj = arguments[i], keys = Object.keys(obj); for(var j=0; j < keys.length; j += 1) { resObj[keys[j]] = obj[keys[j]]; } } return resObj; }

Quería hacer algo que fuera muy sencillo usando Object.assign .

var firstObj = {name : "Saba H.", rollNo : 1}; var secondObj = {college : "WCE"}; var wholeObj = Object.assign(firstObj, secondObj); console.log(wholeObj); // {name : "Saba H.", rollNo : 1, college : "WCE"}

Como Object.assign es parte de la propuesta de armonía ECMAScript6 y no es compatible con muchos navegadores, ¿es posible hacerlo con ES5? Si no es así, ¿hay alguna micro biblioteca?


Encontré un polyfill de trabajo para Object.assign en MDN (impresionante, gracias!):

if (typeof Object.assign != ''function'') { // Must be writable: true, enumerable: false, configurable: true Object.defineProperty(Object, "assign", { value: function assign(target, varArgs) { // .length of function is 2 ''use strict''; if (target == null) { // TypeError if undefined or null throw new TypeError(''Cannot convert undefined or null to object''); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; if (nextSource != null) { // Skip over if undefined or null for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }, writable: true, configurable: true }); }