配列内のオブジェクトを削除しているときに、これに遭遇しました。
コードは次のとおりです。
friends = [];
friends.push(
{
a: 'Nexus',
b: 'Muffin'
},
{
a: 'Turkey',
b: 'MonkMyster'
}
)
console.log(friends);
for(i in friends){
if(friends[i].a == 'Nexus'){
delete friends[i];
friends.push({
a: 'test',
b: 'data'
});
}
}
console.log(friends);
jsfiddleにも掲載されています。
基本的に、私の最初console.log
のfriends
出力はなぜですか?[Object, Object]
ただし、ループ内のそのオブジェクトを削除してから、配列に新しいオブジェクトを追加すると、次のログが記録されます。
[1: Object, 2: Object]
正確には1:, 2:
どういう意味ですか(明らかに各オブジェクトに関連付ける)が、最初のログ記録後になぜそこにないのfriends
でしょうか?友達の配列のオブジェクト表記が間違っていますか?最初のfriends
配列を間違って作成していて、JavaScriptパーサーが修正しているように感じますか?
最初のアイテムを(インデックスを再作成せずに)削除し、新しいアイテムをプッシュしたためです。
最初は、オブジェクトが0番目の位置にあり、別のオブジェクトが1番目の位置にある配列がありました。
変更後、1番目の位置にオブジェクトがあり、2番目の位置に別のオブジェクトがある配列があります。
したがって、コンソールは、最初のエントリが0番目ではなく1番目の位置にあることを示したいだけです。
各コンソールはこれを異なる方法で行う可能性があります。たとえば、Firefoxでは
Array [ <1 empty slot>, Object, Object ]
コンソールは単なるデバッグツールであり、これらの構文は無視してかまいません。あなたは何も悪いことをしていません。
ただし、スパース配列を使用するのは少し奇妙かもしれません。プロパティを削除するだけでなく、配列のインデックスを再作成することを検討できます。
delete array[position]; // Just remove
array.splice(position, 1); // Remove and reindex
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加