2015-05-03 13 views
5

Tôi có hai mảng, một là mảng đa chiều, mảng còn lại là một dãy số nguyên lưu trữ một vị trí ở vị trí cũ để đọc và chỉnh sửa. Tôi có thể đọc, sử dụng một biến riêng biệt, nhưng tôi không biết cách chỉnh sửa. Ví dụ:Lấy giá trị từ mảng sử dụng mảng nguyên cho vị trí javascript

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

Trong ví dụ này làm thế nào tôi có thể sửa giá trị trong nhóm, tại địa điểm được lưu trữ trong biến loc:

groups[2][4] 

Cũng nên nhớ nhóm đó không nhất thiết phải 2 chiều tất cả các thời gian.

+2

'nhóm [2] [4]' sẽ là 'undefined',' groups [2] [3] 'tuy nhiên sẽ là' "Erica" ​​' –

+0

yeah, lol, đã bỏ lỡ điều đó. thanks –

+0

đây là một câu hỏi JS đơn giản, nó không liên quan gì đến Processing.js. –

Trả lời

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

cảm ơn, điều này đã giúp tôi tìm ra nó. –

0

Cảm ơn, đây là những gì tôi đã tìm ra:

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

Chỉ cần bước vào mảng lồng nhau cho đến khi bạn đạt đến độ sâu mong muốn của bạn:

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

Và bây giờ chúng ta có thể chạy

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

và sau đó nếu chúng tôi điều khiển nhật ký những gì tôi n groups[2][3], chúng tôi sẽ thấy giá trị được cập nhật. Ý tưởng thực hiện này là "chúng ta có danh sách các vị trí sâu hơn và sâu hơn, và mảng mảng [...] với dữ liệu", vì vậy chúng ta đơn giản tiếp tục rebinding dữ liệu mảng cho đến khi chỉ còn một mức, đó là nơi chúng ta sẽ tìm thấy giá trị cần cập nhật.

Các vấn đề liên quan