Движение по массиву с помощью другого массива.(решено)
Есть огромная проблема ! Не очень силен в 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, время: 01:15. |