2016-06-21 2 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 нг-повторы следующим образом:

<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-повтору без ng-if), потому что я использую директиву ng-model, чтобы позволить пользователю обновлять массив, и, в свою очередь, услугу (это делается автоматически, поскольку массив был возвращен ссылкой из службы).

Следовательно, теоретически (идеал) должен иметь четыре указателя (каждый указывает на определенную часть массива) и передавать каждый указатель на ng-repeat с фильтром limitTo.

+0

Нет, потому что он не использует указатели, как, что для памяти. (он использует указатели, но не таким образом, что поддерживает C-тип math на них) – 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);

Смежные вопросы