2015-05-03 13 views
5

İki dizim var, biri çok boyutlu bir dizidir, diğeri okuma ve düzenleme için eskideki bir konumu depolayan bir tamsayı dizisidir. Ayrı bir değişken kullanarak okuyabiliyorum, ancak nasıl düzenleneceğine dair bir fikrim yok. Örnek: Ben loc değişkeni depolanan yerde, gruplar halinde değeri düzenlemek nasıl Bu örnekteKonum javascript için tamsayı dizisini kullanarak değerden yararlanın

var loc = [ 2, 4]; 
var groups = [ 
     ["Samantha", "Janice", "Lisa", "Wendell", "Laura"], 
     ["Rachel", "John", "Smithy"], 
     ["Mandy", "Randy", "Jamal", "Erica"] 
]; 

:

groups[2][4] 

Ayrıca bu grup hatırlamıyorum mutlaka 2 boyutlu tüm zamanıdır.

+2

'gruplar [2] [4]' undefined' olacak, 'gruplar [2] [3]' '' '' 'Erica'' olacak –

+0

evet, lol, bunu kaçırdı. teşekkürler –

+0

Bu basit bir JS sorundur, işlem.js ile özellikle ilgisi yoktur. –

cevap

1
function edit (toBeEdited, indexes, value) { 
    var array = toBeEdited, 
     len = indexes.length - 1, 
     i = 0, 
     idx = null; 

    for (; i < len; i += 1) { 
     idx = indexes[i]; 

     if (idx in array) { 
     array = array[idx]; 
     } else { 
     throw new Error("index out of bounds"); 
     } 
    } 

    idx = indexes[len]; 
    if (idx in array) { 
    array[idx] = value; 
    } else { 
    throw new Error("index out of bounds"); 
    } 
} 

var loc = [ 2, 3 ]; 
var groups = [ 
     ["Samantha", "Janice", "Lisa", "Wendell", "Laura"], 
     ["Rachel", "John", "Smithy"], 
     ["Mandy", "Randy", "Jamal", "Erica"] 
]; 

edit(groups, loc, "Anna"); // will replace "Erica" with "Anna" 
+0

teşekkürler, bu bana yardımcı oldu. –

0

sayesinde bu anladım şudur: Eğer istenen derinliği ulaşana kadar

var edit = function(toBeEdited, indexes, value){ 
    var gL=value; 

    var tgL; 
    for (var x=0; x < indexes.length; x++){ 
     var n=indexes.length-1-x; 

     tgL=toBeEdited; 
     for (var y=0; y < n; y++){ 
      tgL=tgL[indexes[y]]; 
     } 

     tgL[indexes[n]]=gL; 
     gL=tgL; 
    } 

    return tgL; 
}; 
0

Basitçe iç içe diziye adım:

function update(data, pos, newValue) { 
    pos = pos.slice(); 
    while(pos.length > 1) { 
    data = data[pos[0]]; 
    pos.splice(0,1); 
    } 
    data[pos[0]] = newValue; 
} 

Ve şimdi

çalıştırabilirsiniz
var loc = [ 2, 3 ]; 
var groups = [ 
    ["Samantha", "Janice", "Lisa", "Wendell", "Laura"], 
    ["Rachel", "John", "Smithy"], 
    ["Mandy", "Randy", "Jamal", "Erica"] 
]; 
update(groups, loc, "jehosephat"); 

ve daha sonra günlüğümüzü konsol sayarsak n groups[2][3] güncelleştirilmiş değeri göreceğiz. Bu uygulama, "daha derin ve daha derin konumların bir listesi ve veri ile [...] dizilerinden oluşan bir diziye sahibiz" şeklindedir, bu yüzden sadece tek bir seviye kalmayıncaya kadar dizi verisini yeniden çizmeye devam ediyoruz. Güncellenecek değeri bulacağım.

İlgili konular