javascript - Cómo fusionar objeto en IE 11
object internet-explorer-11 (6)
Tengo la siguiente matriz de objeto:
Objs[0] = {Name : "ABC"};
Objs[1] = {Roll : 123}
Estoy tratando de hacer lo siguiente:
Objs {
Name : "ABC",
Roll : 123
}
Intenté hacerlo con el siguiente código:
var Objs = [{
Name: "ABC"
}, {
Roll: 123
}];
console.log(
Object.assign.apply(null, [{}].concat(Objs)) // 1
)
or
console.log(
Object.assign({}, ...Objs) // 2
)
El problema es que esto no funciona en IE 11.
Me salen los errores:
Error para 1: no se puede obtener la propiedad ''on'' de una referencia no definida o nula
Error para 2: el objeto no admite la propiedad o el método "asignar"
¿Alguna sugerencia sobre cómo debería fusionar el objeto en IE 11?
Además de @vladatr, en caso de que estés usando Wepack:
En su webpack.config.js
const path = require("path");
module.exports = {
entry: ["babel-polyfill", path.resolve(__dirname, "../src/index.js")],
.
.
En mi punto de entrada src/index.js
archivo:
import "babel-polyfill";
IE11 no es compatible con Object.assign
.
Podría iterar la matriz y las claves y tomar los valores como una nueva propiedad del objeto de resultado.
var objs = [{ Name: "ABC" }, { Roll: 123 }],
result = objs.reduce(function (r, o) {
Object.keys(o).forEach(function (k) {
r[k] = o[k];
});
return r;
}, {});
console.log(result);
Instalar:
npm i -s babel-polyfill
Y en la parte superior de la entrada del archivo index.js agrega:
import ''babel-polyfill''
Esto resolverá algunos problemas que Babel no hizo. Object.assign es uno de ellos.
Esto significa que puede usar nuevos elementos incorporados como Promise o WeakMap, métodos estáticos como Array.from o Object.assign, métodos de ejemplo como Array.prototype.includes y funciones de generador (siempre que use el complemento regenerador). El polyfill se suma al alcance global, así como a los prototipos nativos como String para hacer esto.
Para el final, debe decidir el clima en el que desea usar todo el polietileno de babel (que está minimizado en alrededor de 50 kb) o usar solo lo que necesita a través de polifills individuales, es decir. Es6-promesa para las promesas.
Lo que más me gustaría es utilizar la biblioteca utilitaria de lodash, tiene un método de asignación, que funciona igual que Object.prototype.assign https://lodash.com/docs/4.17.4#assign
Puede usar el método jQuery $.extend() que funciona en IE 11.
var object = {name: ''John'', surname: ''Rowland''};
var newObject = $.extend({}, object);
newObject.age = ''30'';
console.log(object);
console.log(newObject)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Si está utilizando TypeScript, intente reemplazar Object.assign({}, ...Objs)
por {...Objs};
el navegador lo reemplazará automáticamente a __assign({}, Objs);
y esta notacion funciona en IE11.