Движение по массиву с помощью другого массива.(решено)
Есть огромная проблема ! Не очень силен в JS но очень нужно сделать.
var arr = {
view:['or',['and',['value','status','=','1'],['value','type','=','1']],'condition2'],
edit: ['value','status','=','1']
};
var pos = ['view',0,2]
var new_arr = ['value','user','=','1'];
Смысл в следующем мне нужно имея ключи от массива arr которые хранятся в массиве pos перейти по этим ключам в массиве arr и поместить В возвращенную переменную массив new_arr заменив при этом старое. Как не пытался не могу придумать функцию. Помогите пожалуйсто. я так устал :cray: |
var arr = {
view:['or',['and',['value','status','=','1'],['value','type','=','1']],'condition2'],
edit: ['value','status','=','1']
};
var pos = ['view',0,2]
var new_arr =arr
alert(new_arr[pos[0]])
Не понял что нужно помещать в new_arr[pos[0]] |
Я так понял, нужно из свойства view объекта arr, взять нулевой элемент и 2-рой.
Т.е. 'or' и 'condition2'... Т.о. new_arr=['or', 'condition2']; :D |
:-? Или нулевому присвоить 2 ( мну сначала подумал про это... потом стал сомневаться
|
Так еще раз: ситуация сложная.
есть массив в котором храняться ключи другого массива. нужно пройти путь в одном массиве по ключам которые храняться в другом и после записать туда значение. main_arr = [[0,[0,1]],1] path_arr = [0,1,0] то есть нужно пройти путь по main_arr используя ключи из массива path_arr 1. main_arr -> ключ path_arr [0] // получаем [0,[0,1]] 2. main_arr -> ключ path_arr [1] // получаем [0,1] 3. main_arr -> ключ path_arr [2] // получаем 1 пока реализовал как полный дурак вот посмотрите межет поймете проблему:
function update_temp_arr(arr){
var p = temp_privileges_pos;
switch (temp_privileges_pos.length) {
case 1:
temp_privileges[p[0]] = arr;
break
case 2:
temp_privileges[p[0]][p[1]] = arr;
break
case 3:
temp_privileges[p[0]][p[1]][p[2]] = arr;
break
case 4:
temp_privileges[p[0]][p[1]][p[2]][p[3]] = arr;
break
case 5:
temp_privileges[p[0]][p[1]][p[2]][p[3]][p[4]] = arr;
break
case 6:
temp_privileges[p[0]][p[1]][p[2]][p[3]][p[4]][p[5]] = arr;
break
case 7:
temp_privileges[p[0]][p[1]][p[2]][p[3]][p[4]][p[5]][p[6]] = arr;
break
case 8:
temp_privileges[p[0]][p[1]][p[2]][p[3]][p[4]][p[5]][p[6]][p[7]] = arr;
break
case 9:
temp_privileges[p[0]][p[1]][p[2]][p[3]][p[4]][p[5]][p[6]][p[7]][p[8]] = arr;
break
}
}
|
Цитата:
Цитата:
Вариант немного поумней...
var ad = [[0,[0,1]],1];
var ai = [0,1,0];
var a=ad,i;
for (i=0; i<ai.length; i++) {
a=a[ai[i]];
};
alert(a);
Там таки 0! |
ksa,
Ахах в своих же объяснениях запутался сейчас попробую =) стоп а как теперь изменить получившийся 0 на свою переменную и получить полный массив? |
dimast,
Cначало копируем старый объект в новый - затем крутимся в новом и чистим - меняем(ключи то те же |
Спасибо конечно Deff, но мне нужен пример =(
|
dimast,
:cray:
var main_arr = [[0,[0,100]],1];
var path_arr = [0,1,1];
function x(e, d, f) {
for (var c = [], b = e, a = 0; a < d.length; a++) c[a] = b, b = b[d[a]];
if (3 == arguments.length) {
b = f;
for (a = c.length - 1; - 1 < a; a--) c[a][d[a]] = b, b = c[a]
}
return b
};
alert(x(main_arr,path_arr))
alert(x(main_arr,path_arr,25))
alert(main_arr)
alert(x(main_arr,path_arr,"test"))
alert(main_arr)
|
| Часовой пояс GMT +3, время: 00:37. |