2016-06-21 14 views
0

JavaScriptは何らかの形でポインタ演算をサポートしていますか? (私はCのようにポインタを必要とする)配列のコピーを作成せずにjavacriptの配列ポインタ

var arr2 = arr + 2; /* obviously this is not the correct way */ 
console.log(arr2); /* this should have printed [3,4] */ 

例えば、私は配列

var arr = [1,2,3,4]; 
console.log(arr); /* this prints [1,2,3,4] */ 

のような何かをすることが可能です持っています。

私が必要とする具体的な理由は次のとおりです。各要素が文字列のペアである大きな配列を持っています。

var arr = [['name1',true],['name2',false]]; 

私は(私は角JSを使用しています)ngのリピートに配列を供給します。配列は、このような要素の数千から構成され、サービス/ファクトリに由来します(つまり、参照によって返されます)。配列の内容を4列に表示し、各文字列の後にチェックボックスを表示したい。これを行うには、私は次のように4 ngのリピートを持っている:私は配列を4回横断する必要があるため

<div class="col-lg-3"> 
    <div class="checkbox" ng-repeat="x in arr" ng-if="$index % 4 == 0"> 
    <label><input type="checkbox" ng-model="x[1]">{{x[0]}}</label> 
    </div> 
</div> 
<div class="col-lg-3"> 
    <div class="checkbox" ng-repeat="x in arr" ng-if="$index % 4 == 1"> 
    <label><input type="checkbox" ng-model="x[1]">{{x[0]}}</label> 
    </div> 
</div> 
<div class="col-lg-3"> 
    <div class="checkbox" ng-repeat="x in arr" ng-if="$index % 4 == 2"> 
    <label><input type="checkbox" ng-model="x[1]">{{x[0]}}</label> 
    </div> 
</div> 
<div class="col-lg-3"> 
    <div class="checkbox" ng-repeat="x in arr" ng-if="$index % 4 == 3"> 
    <label><input type="checkbox" ng-model="x[1]">{{x[0]}}</label> 
    </div> 
</div> 

この方法は非常に遅いです。 ng-modelディレクティブを使用してユーザーが配列を更新できるので、配列を前処理することはできません(つまり、ng-ifなしで各ng-repeatに渡す4つの等しい大きさの部分に分割します) (サービスからの参照によって配列が返されたため、これが自動的に行われます)。

したがって理想的には、4つのポインタ(それぞれが配列の特定の部分を指す)を持ち、limitToフィルタを使用して各ポインタをng-repeatに渡すのが理想的です。

+0

いいえ、それはメモリのためにそのようなポインタを使用していないため。 (それはポインタを使用しますが、C型の数値演算をサポートする方法ではありません) – Nikki9696

+1

がいいですが、それは文字列に変換されます –

+1

それはインデックスをサポートします。なぜあなたはそれを使わないだけではないのか分かりません。またはスプライス。 – Nikki9696

答えて

0

コンソールの特定の場所から最後までアレイを印刷しますか?

var arr = [1,2,3,4]; 
console.log(arr); 
console.log(arr.splice(2)); 
0

あなたは

yourArray.splice(2) 
0

ハズレと同じ効果を得ることができ、JavaScriptは、あなたのメモリレベルのアクセスのようなものを与えるものではありません。

あなたができる最良のこと(コピーを作成します)は、指定された場所から始まる配列の部分を渡したい場合は、乱用です。slice明らかに、これはの前方に移動し、後方に移動しないと機能しません。

var arr = [1, 2, 3, 4, 5]; 
 

 
// Kinda, sorta but not really create a pointer at a given point in the array 
 
// It doesn't actually refer to the original array. It creates a copy of a subsection of the array 
 
var pretendPointerButNotAtAll = arr.slice(2); 
 

 
// Almost like doing pointer arithmetic. You get the same value as doing arr[4] 
 
// or arr + 4 in a language with pointers 
 
var elementAtOffset = pretendPointerButNotAtAll[2]; 
 
console.log(elementAtOffset);