私は次のオブジェクトの配列を持っています:
Objs[0] = {Name : "ABC"};
Objs[1] = {Roll : 123}
私は次のようにしようとしています:
Objs {
Name : "ABC",
Roll : 123
}
私は次のコードでそれを作ろうとしました:
var Objs = [{
Name: "ABC"
}, {
Roll: 123
}];
console.log(
Object.assign.apply(null, [{}].concat(Objs)) // 1
)
or
console.log(
Object.assign({}, ...Objs) // 2
)
問題は、これがIE 11で機能しないことです。
エラーが発生します:
1のエラー:未定義またはnull参照のプロパティ 'on'を取得できません
2のエラー:オブジェクトはプロパティまたはメソッド 'assign'をサポートしていません
IE 11でオブジェクトをマージする方法に関する提案はありますか?
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);
IE 11.で機能するjQueryメソッド $。extend() を使用できます。
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>
インストール:
npm i -s babel-polyfill
そして、エントリの先頭にindex.js file add:
import 'babel-polyfill'
これにより、バベルがしなかったいくつかの問題が解決されます。 Object.assignはそのうちの1つです。
つまり、PromiseやWeakMapなどの新しいビルトイン、Array.fromやObject.assignなどの静的メソッド、Array.prototype.includesなどのインスタンスメソッド、およびジェネレーター関数(リジェネレータプラグインを使用する場合)を使用できます。これを行うために、ポリフィルは、グローバルスコープに加えて、Stringなどのネイティブプロトタイプを追加します。
最後に、babel-polyfill(最小50kb程度)全体を使用するか、個々のポリフィルで必要なもののみを使用するかを決定する必要があります。 es6-promise Promisesの場合。
プロジェクトでlodash utilライブラリを使用している場合は、lodashのassignメソッドが最善であると思います。これはObject.prototype.assignと同じように機能します。 IE(少なくともIE11)を含むすべてのブラウザーの場合: https://lodash.com/docs/4.17.4#assign
まだlodashを使用していない場合は、検討してください。 JavaScript、TypeScript、NodeJSのいずれでも、すべてのブラウザーで完全に機能する多くのutil関数があります(自分でテストしましたが、他のJS接続テクノロジーもサポートしています)。個人的に私はすべてのjavascript接続プロジェクトにlodashを含めます
このようなポリフィルを使用します。参照:MDN
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
});
}