2017-08-21 13 views
1

私は場所の配列を持っています、私は、原点、中点と目的地に別々にアクセスできる必要があります。最初と最後を除くすべての配列要素を取得

私の起源は常に最初の要素であり、宛先は常に最後の要素ですが、どのように動的にすべての中点にアクセスできるのかわかりません。

答えて

6

これを実現するには、shift()pop()を使用して、それぞれ配列の最初と最後の要素を取得します。それらの操作の後で配列に残っているものは、あなたの '中点'になります。私は表示する基本的な配列を取っているデータがないので

var middlePoints = ['start', 'A', 'B', 'C', 'end']; 
 
var origin = middlePoints.shift(); 
 
var destination = middlePoints.pop(); 
 

 
console.log(origin); 
 
console.log(middlePoints); 
 
console.log(destination);

2

:これを試してみてください。また、この方法で元の配列を保持します。

var arr = [1,2,3,4,5,6,7]; 
 
var middle = arr.slice(1, arr.length-1); 
 
console.log(middle);

0

このような何か?

var allPoints = [0, 1, 2, 3, 4, 5], 
 
    midPoints = [] 
 

 
/*start the iteration at index 1 instead of 0 since we want to skip the first point anyway and stop iteration before the final item in the array*/ 
 
for (var i = 1; i < (allPoints.length - 1); i++) { 
 
    midPoints.push(allPoints[i]); 
 
} 
 

 
console.log(midPoints);

+0

これは正しい出力を生成するが、それはJSにそれを実行するために持っているすべての小さな小さなステップを告げるように、私はこの方法があまりにも面倒で、明示的な検討したいです。このタスクに明示的なループを使用することは、私にとっては反パターンです。 micromanageしないでください。 JSは 'midPoints = allPoints.slice(1、allPoints.length-1) 'でビルドされていますが、あなたの意図についてより読みやすく、より明確であり、より高速です。 – Thomas

+0

落札が必要でしたか?これはOPの質問に対する有効な解決策です。あなたは基本的なforループがパフォーマンスを破壊するように思えます。私は、はい、いくつかの組み込みjs配列関数を使用する方が理にかなっていることに同意しますが、これは非常に簡単な解決策であり、動作します。 – tommyO

+0

落札は、正しい出力が得られたとしても、これは良い解決策ではないという私の見解を反映しています。パフォーマンスに関してではなく、このコードは組み込みのメソッドを使用する上での利点がありません。わたしはしばしば聞いているストローマンのように少しでも* "しかし、私の明示的なコードは高速です" *。そして、私の指摘は、このコードは単純なものとまったく逆のことです。あなたは微調整しています。ある配列から別の配列へ項目を移動し、手元の実際の作業を複雑にする/隠す:最初の項目の後に始まり最後の項目の前に終わる 'allpoints 'の部分を私に与えてください。 – Thomas

関連する問題