ただし、このページをEdgeに読み込もうとすると、質問と回答が消えます。カテゴリーのみが投稿されます。また、IEでこのページを読み込もうとすると、検索バーを除いてすべてが消えます。
Edgeには次のエラーが表示されます。
SCRIPT1028:SCRIPT1028:faq.htmlの84行目の識別子、文字列、または番号が期待されます
これは、次のコードを指します。
function sortByCategory(data) {
return data.reduce((obj, c) => {
const { category, ...rest } = c; // this line throws the error
obj[category] = obj[category] || [];
obj[category].Push(rest);
return obj;
}, {});
}
どうすれば修正できますか?
Edgeはプロパティレストをまだサポートしていないようです(残念なことに)、これは残念ですが、ES2018でのみ正式に追加されました。プロパティの残りを使用しないようにコードを書き直す必要があります(...rest
オブジェクトリテラルの一部)(または、 CertainPerformanceが示唆するように のように、トランスパイラーを使用します)。
以下に、多くの方法のうちの1つを示します。
function sortByCategory(data) {
return data.reduce((obj, c) => {
//const { category, ...rest } = c;
const { category } = c;
const rest = {};
for (const key of Object.keys(c)) {
if (key !== "category") {
rest[key] = c[key];
}
}
obj[category] = obj[category] || [];
obj[category].Push(rest);
return obj;
}, {});
}
オブジェクトのdelete
はオブジェクトの最適化を解除し、プロパティの検索が遅くなるため、delete
の使用を避けました。しかし、これらのオブジェクトだけを最適化解除しても、ページ/アプリの知覚速度に違いは生じない可能性があります。
EdgeもIE support オブジェクトプロパティの残りの構文ではありません(ただし、Edgeは最終的にサポートする可能性があります)。 でES5にコードを自動的にトランスコンパイルすることをお勧めしますBabel を使用すると、言語の最新かつ最高のバージョンで記述できるようになりますが、古く互換性のないブラウザはトランスコードされたコードをすべて理解できます。
const { category, ...rest } = c;
結果として
"use strict";
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
var _c = c,
category = _c.category,
rest = _objectWithoutProperties(_c, ["category"]);
それほどきれいに見えませんが、自動的に実行できます。
手動で行う方法の1つは次のとおりです。
const c = {
category: 'category',
foo: 'foo',
bar: 'bar'
};
const category = c.category;
// Object.assign so as not to mutate the original object:
const rest = Object.assign({}, c);
delete rest.category;
console.log(rest);