web-dev-qa-db-ja.com

エッジ:SCRIPT1028:予想される識別子、文字列または番号

ChromeおよびFirefox: enter image description here

ただし、このページを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;
  }, {});
}

どうすれば修正できますか?

6
Maurits Bouman

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の使用を避けました。しかし、これらのオブジェクトだけを最適化解除しても、ページ/アプリの知覚速度に違いは生じない可能性があります。

8
T.J. Crowder

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);
3