阵列指针在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中的指针)。

我需要的具体原因是:我有一个大数组,其中每个元素是一对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)

最新更新