を探すための適切な方法は何であるI次のコードを持っている: は、未定義の値
if (array.indexOf("undefined")===-1){
do something...
}
私の最初の配列
はこれです:配列を= [,,,,,,]。
プログラムが進行するにつれて値が塗りつぶされますが、未定義のスペースがない場合は機能を停止します。上記の構文は正しくないが、誰でも私にその理由を教えることができます。
を探すための適切な方法は何であるI次のコードを持っている: は、未定義の値
if (array.indexOf("undefined")===-1){
do something...
}
私の最初の配列
はこれです:配列を= [,,,,,,]。
プログラムが進行するにつれて値が塗りつぶされますが、未定義のスペースがない場合は機能を停止します。上記の構文は正しくないが、誰でも私にその理由を教えることができます。
あなたのコードは、文字列 "undefined"を探します。 undefined
の値を含む最初のインデックスを探したいとします。最良の方法は、findIndex
を使用することです:あなたは、文字列"undefined"
代わりに、値そのものを渡すため
if(array.findIndex(x=>x===undefined) !== -1) {
//do something
}
これは、私がまだ矢印関数に慣れていないのに、問題を解決しました。ですから、基本的にindexOfで未定義の値を探す方法はありませんか? (実際には== - 1) – Kostis
矢印関数を 'function(x){return x === undefined;}'に置き換えることができます。 'indexOf'で' undefined'を検索する方法はありません。 –
'.indexOf'で' undefined'を確実に検索できます。 '.indexOf'はそれらを無視するため、疎な配列に穴を見つけることはできません。 –
for(var ind in array) {
if(array[ind] === undefined) {
doSomething();
}
}
あなたのチェックは動作しませんでした。また、.indexOf()
は、配列の穴を明示的に無視するように設計されています。
繰り返しを使用して配列の穴を検出するのは無駄です。代わりに、カウンターを使用して穴の数を追跡し、カウンターが長さに一致するとコードを実行できます。
どちらの方法でも、特定のインデックスの穴を検出する適切な方法は、in
演算子を使用することです。
ここでは再利用のためのクラスベースのソリューションです:
class SpacesArray extends Array {
constructor(n, callback) {
super(n);
this.callback = callback;
this.counter = 0;
}
fillHole(n, val) {
if (!(n in this)) {
this.counter++;
console.log("filling hole", n);
}
this[n] = val;
if (this.counter === this.length) {
this.callback();
}
}
}
// Usage
var sa = new SpacesArray(10, function() {
console.log("DONE! " + this);
});
// Emulate delayed, random filling of each hole.
for (let i = 0; i < sa.length; i++) {
const ms = Math.floor(Math.random() * 5000);
setTimeout(() => sa.fillHole(i, i), ms);
}
は、より多くの情報が必要。満たされるスペースの最終的な数を知っていますか?それらは順不同で満たされていますか?メンバーによって定義されたスペースが実際の値が「未定義」であるか、単に配列の穴ですか? –
このテストでは、** string ** '' undefined ''が検索されます。 – Pointy
'array.findIndex(function(x){return x === undefined})'はうまくいくようです。 – Blorgbeard