如何在IE 11中合并对象

Dav*_*vid 27 javascript object internet-explorer-11

我有以下对象数组:

Objs[0] = {Name : "ABC"};
Objs[1] = {Roll : 123}
Run Code Online (Sandbox Code Playgroud)

我正在努力使它如下:

Objs {
  Name : "ABC",
  Roll : 123
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下代码制作它:

var Objs = [{
  Name: "ABC"
}, {
  Roll: 123
}];

console.log(
  Object.assign.apply(null, [{}].concat(Objs)) // 1
)
or 

console.log(
  Object.assign({}, ...Objs) // 2
)
Run Code Online (Sandbox Code Playgroud)

问题是这在IE 11中不起作用.

我得到错误:

1的错误:无法获取未定义或空引用的属性'on'

2的错误:对象不支持属性或方法'assign'

关于如何在IE 11中合并对象的任何建议?

Neb*_*pic 45

您可以使用在IE 11中工作的jQuery方法$ .extend().

var object = {name: 'John', surname: 'Rowland'};
var newObject = $.extend({}, object);

newObject.age = '30';

console.log(object);
console.log(newObject)
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 35

IE11不支持Object.assign.

您可以迭代数组和键,并将值作为结果对象的新属性.

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);
Run Code Online (Sandbox Code Playgroud)


小智 13

安装:

npm i -s babel-polyfill
Run Code Online (Sandbox Code Playgroud)

并在条目顶部index.js文件添加:

import 'babel-polyfill'
Run Code Online (Sandbox Code Playgroud)

这将解决Babel没有解决的一些问题.Object.assign就是其中之一.

这意味着您可以使用新的内置函数(如Promise或WeakMap),静态方法(如Array.from或Object.assign),实例方法(如Array.prototype.includes)和生成器函数(假设您使用的是再生器插件).为了做到这一点,polyfill添加到全局范围以及像String这样的本机原型.

最后,您应该决定要使用整个babel-polyfill(最小化约50kb)的天气,或者仅使用通过单个polyfill所需的天气,即.es6-承诺承诺.


bla*_*ekp 5

我认为最好的做法是,如果在项目中使用lodash util库,则是lodash的assign方法,该方法对于所有浏览器(包括IE(至少是IE11))都与Object.prototype.assign相同:https:// lodash。 com / docs / 4.17.4#assign

如果尚未使用lodash,请考虑使用。它具有许多util函数,这些函数在JavaScript,TypeScript和NodeJS(由我测试过,但可能还支持其他JS连接技术)上的所有浏览器上均能正常工作。我个人将lodash包括到我所有与JavaScript相关的项目中