31.01.2013, 13:16
|
Новичок на форуме
|
|
Регистрация: 31.01.2013
Сообщений: 5
|
|
Движение по массиву с помощью другого массива.(решено)
Есть огромная проблема ! Не очень силен в 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 заменив при этом старое.
Как не пытался не могу придумать функцию. Помогите пожалуйсто. я так устал
Последний раз редактировалось dimast, 01.02.2013 в 09:29.
|
|
31.01.2013, 13:29
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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]]
|
|
31.01.2013, 14:04
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Я так понял, нужно из свойства view объекта arr, взять нулевой элемент и 2-рой.
Т.е. 'or' и 'condition2'...
Т.о.
new_arr=['or', 'condition2'];
|
|
31.01.2013, 14:16
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Или нулевому присвоить 2 ( мну сначала подумал про это... потом стал сомневаться
|
|
31.01.2013, 14:28
|
Новичок на форуме
|
|
Регистрация: 31.01.2013
Сообщений: 5
|
|
Так еще раз: ситуация сложная.
есть массив в котором храняться ключи другого массива. нужно пройти путь в одном массиве по ключам которые храняться в другом и после записать туда значение.
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
}
}
|
|
31.01.2013, 14:46
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Сообщение от dimast
|
main_arr = [[0,[0,1]],1]
path_arr = [0,1,0]
1. main_arr -> ключ path_arr [0] // получаем [0,[0,1]]
2. main_arr -> ключ path_arr [1] // получаем [0,1]
3. main_arr -> ключ path_arr [2] // получаем 1
|
Какой же там 1!
Сообщение от dimast
|
пока реализовал как полный дурак
|
Отож...
Вариант немного поумней...
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!
|
|
31.01.2013, 14:56
|
Новичок на форуме
|
|
Регистрация: 31.01.2013
Сообщений: 5
|
|
ksa,
Ахах в своих же объяснениях запутался сейчас попробую =)
стоп а как теперь изменить получившийся 0 на свою переменную и получить полный массив?
|
|
31.01.2013, 15:06
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
dimast,
Cначало копируем старый объект в новый - затем крутимся в новом и чистим - меняем(ключи то те же
|
|
31.01.2013, 15:16
|
Новичок на форуме
|
|
Регистрация: 31.01.2013
Сообщений: 5
|
|
Спасибо конечно Deff, но мне нужен пример =(
|
|
31.01.2013, 15:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,132
|
|
dimast,
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)
|
|
|
|