オブジェクトを含む多次元配列があり、特定のプロパティが含まれているオブジェクトを配列から削除したいと考えています。
コーヒースクリプト
for dataColumn in allDataColumns
for brentSpiner, i in dataColumn
console.log i, brentSpiner.refreshRate
#dataColumn.remove i if brentSpiner.refreshRate is -1
console.log
以下の行がコメントアウトされている場合、上記は期待どおりに機能します
for dataColumn in allDataColumns
for brentSpiner, i in dataColumn
console.log i, brentSpiner.refreshRate
dataColumn.remove i if brentSpiner.refreshRate is -1
上記のエラーは次のようになりますbrentSpiner is undefined console.log(i, brentSpiner.refreshRate);
。
2行目の存在によって、上の行の変数が未定義になるのはどうしてでしょうか?
レンダリングされた JavaScript
失敗する
for (_i = 0, _len = allDataColumns.length; _i < _len; _i++) {
dataColumn = allDataColumns[_i];
for (i = _j = 0, _len1 = dataColumn.length; _j < _len1; i = ++_j) {
brentSpiner = dataColumn[i];
console.log(i, brentSpiner.refreshRate);
if (brentSpiner.refreshRate === -1) {
dataColumn.remove(i);
}
}
}
作品
for (_i = 0, _len = allDataColumns.length; _i < _len; _i++) {
dataColumn = allDataColumns[_i];
for (i = _j = 0, _len1 = dataColumn.length; _j < _len1; i = ++_j) {
brentSpiner = dataColumn[i];
console.log(i, brentSpiner.refreshRate);
}
}
(補足: .remove は Resig を介して Array プロトタイプに追加されました)
アップデート
これは私の側の論理エラーでした。承認された回答を表示して、その理由を確認してください。ベローは私がやったことで、うまくいきました:
for dataColumn in allDataColumns
i = 0
len = dataColumn.length
while i < len
if dataColumn[i].refreshRate is -1
dataColumn.remove i
len--
i++
レンダリング
for (_i = 0, _len = allDataColumns.length; _i < _len; _i++) {
dataColumn = allDataColumns[_i];
i = 0;
len = dataColumn.length;
while (i < len) {
if (dataColumn[i].refreshRate === -1) {
dataColumn.remove(i);
len--;
}
i++;
}
}