Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2013, 13:16
Новичок на форуме
Отправить личное сообщение для dimast Посмотреть профиль Найти все сообщения от dimast
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2013, 13:29
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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]]
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2013, 14:04
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Я так понял, нужно из свойства view объекта arr, взять нулевой элемент и 2-рой.
Т.е. 'or' и 'condition2'...

Т.о.

new_arr=['or', 'condition2'];

Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2013, 14:16
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Или нулевому присвоить 2 ( мну сначала подумал про это... потом стал сомневаться
Ответить с цитированием
  #5 (permalink)  
Старый 31.01.2013, 14:28
Новичок на форуме
Отправить личное сообщение для dimast Посмотреть профиль Найти все сообщения от dimast
 
Регистрация: 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
        }

    }
Ответить с цитированием
  #6 (permalink)  
Старый 31.01.2013, 14:46
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,118

Сообщение от 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!
Ответить с цитированием
  #7 (permalink)  
Старый 31.01.2013, 14:56
Новичок на форуме
Отправить личное сообщение для dimast Посмотреть профиль Найти все сообщения от dimast
 
Регистрация: 31.01.2013
Сообщений: 5

ksa,
Ахах в своих же объяснениях запутался сейчас попробую =)

стоп а как теперь изменить получившийся 0 на свою переменную и получить полный массив?
Ответить с цитированием
  #8 (permalink)  
Старый 31.01.2013, 15:06
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

dimast,
Cначало копируем старый объект в новый - затем крутимся в новом и чистим - меняем(ключи то те же
Ответить с цитированием
  #9 (permalink)  
Старый 31.01.2013, 15:16
Новичок на форуме
Отправить личное сообщение для dimast Посмотреть профиль Найти все сообщения от dimast
 
Регистрация: 31.01.2013
Сообщений: 5

Спасибо конечно Deff, но мне нужен пример =(
Ответить с цитированием
  #10 (permalink)  
Старый 31.01.2013, 15:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подгрузка другого сайта с помощью JS mokus Общие вопросы Javascript 2 21.11.2010 21:59