2016-06-21 30 views
0

JavaScript是否以某種方式支持指針算術?javascript中的數組指針

例如,我有數組

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

是否有可能做這樣的事情:

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

,而無需創建數組的副本(我只需要一個指針在C) 。

我需要這個的具體原因如下:我有一個大的數組,其中每個元素是一對字符串,布爾值,例如,

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

我想喂數組爲ng-repeat(我正在使用Angular JS)。該數組由數千個這樣的元素組成,並且來自服務/工廠(即通過引用返回)。我想在4列中顯示數組的內容,每個字符串後面都有一個複選框。要做到這一點,我在下面的方式4 NG-重複:

<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> 

這種方法很慢,因爲我需要數組遍歷4次。 我不能預處理數組(即將其分割成四個同樣大的部分,我將傳遞給每個ng-repeat而不使用ng-if),因爲我使用ng-model指令來允許用戶更新數組,並依次執行服務(由於數組是從服務引用返回的,因此這是自動完成的)。因此,(理論上)理想將是有四個指針(每個指向數組的特定部分),並通過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);