2011-08-11 34 views
9

JS Tôi có một mảng JSON như thế này:Tiếp cận JSON hoặc tài sản sử dụng chuỗi

_htaItems = [ 
    {"ID":1, 
    "parentColumnSortID":"0", 
    "description":"Precondition", 
    "columnSortID":"1", 
    "itemType":0}, 
    {"ID":2, 
    "parentColumnSortID":"0", 
    "description":"Precondition", 
    "columnSortID":"1", 
    "itemType":0}] 

Tôi muốn cập nhật này bằng cách thông qua ID, tên cột và giá trị mới cho một chức năng:

function updateJSON(ID, columnName, newValue) 
    { 
     var i = 0; 
     for (i = 0; i < _htaItems.length; i++) 
     { 
      if (_htaItems[i].ID == ID) 
      { 
       ????? 
      } 
     } 
    } 

Câu hỏi của tôi là, làm cách nào để cập nhật giá trị? Tôi biết tôi có thể làm điều gì đó như sau:

_htaItems[x].description = 'New Value' 

Nhưng trong nguyên nhân của tôi, tên cột đang được chuyển thành chuỗi.

+2

Bạn có một mảng JavaScript, không JSON. –

+0

có thể trùng lặp của [Cách sử dụng giá trị biến cho khóa của một đối tượng khác?] (Http://stackoverflow.com/questions/2224542/how-to-use-a-variable-value-for-the-key- của một đối tượng khác) –

+1

@jagdipa Felix đúng - không có JSON ở đây. Bạn có một mảng được xây dựng bằng cách sử dụng cú pháp ngữ pháp mảng có chứa các đối tượng được xây dựng với cú pháp ngữ pháp đối tượng. – JAAulde

Trả lời

18

Trong JavaScript, bạn có thể truy cập vào một đối tượng sở hữu một trong hai với ký hiệu chữ:

the.answer = 42; 

Hoặc với ký hiệu trong ngoặc vuông sử dụng một chuỗi cho tên thuộc tính:

the["answer"] = 42; 

Hai báo cáo làm chính xác điều tương tự, nhưng trong trường hợp thứ hai, vì những gì đi trong dấu ngoặc đơn là một chuỗi, nó có thể là bất kỳ biểu thức nào giải quyết thành một chuỗi (hoặc có thể bị ép buộc thành một chuỗi). Vì vậy, tất cả các làm điều tương tự:

x = "answer"; 
the[x] = 42; 

x = "ans"; 
y = "wer"; 
the[x + y] = 42; 

function foo() { 
    return "answer"; 
} 
the[foo()] = 42; 

... mà là để thiết lập answer tài sản của đối tượng the để 42.

Vì vậy, nếu description trong ví dụ của bạn không thể là một nghĩa đen bởi vì nó được thông qua cho bạn từ một nơi khác, bạn có thể sử dụng ký hiệu trong ngoặc vuông:

s = "description"; 
_htaItems[x][s] = 'New Value'; 
+1

Giải thích rõ ràng na! Tôi đã đọc hàng ngàn bài báo và không thể nhận được câu trả lời. Chỉ cần cứu ngày của tôi. Cảm ơn bạn! –

+0

Giải thích tuyệt vời! Cảm ơn bạn –

1

_htaItems [x] [columnName] = 'Giá trị mới'; Hay tôi hiểu nhầm bạn?

+0

+1 đánh bại tôi sau 3 giây! – JAAulde

+2

Để công bằng, có lẽ đây là lúc bạn cần bấm nút "kiểu mã"); – sternr

0

Bạn cần phải sử dụng ký hiệu khung vuông, giống như bạn đã làm cho chỉ số mảng:

_htaItems[i][columnName] = newValue; 
+0

Điều đó thật dễ hiểu: D – jagdipa

0

Chỉ cần làm _htaItems[i][columnName] = newValue;. Nó sẽ thay đổi thuộc tính được chỉ định trong columnName thành newValue.

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