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中的指针)。
我需要的具体原因是:我有一个大数组,其中每个元素是一对string,boolean,例如
var arr = [['name1',true],['name2',false]];
我想将数组馈入NG重复(我正在使用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>
此方法非常慢,因为我需要四次穿越数组。我无法预处理数组(即,将其分成四个同样大的部分,我将不会将其传递给每个NG-REPEAT,而没有NG-IF),因为我使用NG模型指令允许用户更新数组,并且反过来,服务(这是自动完成的,因为该数组是通过服务中的引用返回的)。
因此,(理论上)理想是有四个指针(每个指向数组的特定部分),然后将每个指针传递给使用限量过滤器的NG-重复。
nope,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);
您是否想将数组从控制台的某个位置打印出来?
var arr = [1,2,3,4];
console.log(arr);
console.log(arr.splice(2));
您可以使用
实现相同的效果yourArray.splice(2)