2016-11-13 4 views
-2

言語をハックするのはいつも楽しいので、好奇心だけがこの質問を後援します。より簡潔な方法で配列のインデックスを取得する方法はありますか?

何らかの種類のオブジェクトを保持する配列があるとします。オブジェクトにはidプロパティがあります。 Idは空の文字列、偽、nullまたは任意の偽の値にすることはできません。配列の長さはゼロです。私はこの値の索引(存在する場合)を取得し、ループが見つかるとすぐに終了したいと考えています。

var id = /some value to check/; 
var index; 
for (var i = 0, item; item = arr[i], 
    item===undefined?false:item.id==id?(index=i,false):true; i++); 

あなたはどう思いますか?

+2

コードは "あまりにも巧妙"なので、 'break'を使って本体にループとして書き込む方がより明確になるかもしれません(冗長ではありません)。現実の世界では、通常、高次/既存の関数をほとんどの場合使用します。これにより、明快さを失うことなく '簡潔さ'が追加されます。 – user2864740

+2

私はこれがhttp://codereview.stackexchange.com/に属していると思います。 – mplungjan

+0

@ user2864740 - 私はそれがもっと冗長かもしれないことを完全に承知しています。実際には、多くの方法で記述することができます。しかし、より簡潔にできるのであれば私は興味があります。しかし、ブレークを使用しないでください - それはループを壊す "汚い"方法です。通常はループの本体にチェックを入れます。 – Hibryda

答えて

0

私はjsperfを上記の提案と一緒に投稿しました。あなたが望むなら、周りを遊んでください。

jsperf mentioned

最速FFとChromeの下のコメントで掲示私whileループの下に上記の私の最初の例です。 find矢印関数を持つ解は、どちらの場合でも最も遅くなります。私はWinを使わないので、IEでテストできません。

私はこのjsperfがひどく書かれていることを知っています - 周り遊んでください。

+0

あなたの質問は「簡潔さ」を意味しますが、この「回答」はパフォーマンスに焦点を当てています。あなたが興味を持っているのはどちらですか? –

+0

@torazaburo両方。簡潔な方法を探している間に、いくつかの補助的な欠点/利点が見つかった。それで全部です。 しかし、質問は簡潔さに関するものでした。おそらく解決の提案がありますか? – Hibryda

関連する問題