私はパラメータの助けを借りて関数を実行しようとしている次のコードを持っています。パラメータは、それが示す配列/文字列に対して操作を実行するJavascriptを指示(id
は0以外ps
アレイとid
パラメータが0である場合properties
ストリング、およびas
アレイとattributes
列である例えば場合):配列アサインの参照エラー(左側のアラインメント)
var properties = "apple=fruit";
var attributes = "carrot=vegetable banana=fruit cherry=fruit fruit";
var ps = [];
var as = [];
function getpsas(id)
{
(id === 0 ? ps : as) = (id === 0 ? properties : attributes).split(" ").map
(
function(element)
{
var eqlpos = element.lastIndexOf("=");
return {name: element.substr(0, eqlpos), type: element.substr(eqlpos + 1)};
}
).filter
(
function(element)
{
return (/^(vegetable|fruit)$/.test(element.type));
}
);
}
getpsas(0);
getpsas(1);
console.log(ps);
console.log(as);
,Fiddleここに。 (id === 0 ? ps : as) =
部分に「Uncaught ReferenceError:無効な左辺が割り当てられました」がスローされます。 =
の左側から角括弧を削除すると、後者の配列(別名as
)のみに続く関数を実行し、前者の関数(別名ps
)は実行しないという点を除いて、機能します。
私はここで間違ったことをしていることを知っています。括弧や記号のペア/記号がありません。私はoperator precedence in Javascriptをチェックしましたが、同じ問題については他の質問もありますが、すべてが正しく動作するはずです。 ===
(条件付き)、=
(代入用)などがあります。最も悩まされているのは、三項演算子内の他の参照が動作することです(このサンプルの右部分、私のコードの他の部分)。
これは...何が間違っていますか?
私はそれが起こる正確に何を説明し、なぜ私のアプローチは間違っていたという理由だけで、これが最良の答えであることを認めざるを得ません。私は "オブジェクト"(厳密に言えば)を使用せずにこれを解決しましたが、等価の右辺部分を "ダミー配列"(_temp_という名前)に割り当て、_if(id === 0){ps = temp;} else {as = temp} _は関数の最後にあります。私の特定のコードに単純なソリューションを適用しても、あなたの答えは完璧でしたが、そうであってもすべての中で最良の答えです。ありがとうございました。修正したコメントは編集できなかったので、削除して再投稿しなければなりませんでした。 –