2010-04-26 19 views
3

我有以下的JavaScript對象:當我只知道某個項目屬性的值時,如何從JavaScript數組中選擇項目?

{ 
    "DPI": "66.8213457076566", 
    "width": "563.341067", 
    "editable": "True", 
    "pricecat": "6", 
    "numpages": "2", 
    "height": "400", 
    "page": [{ 
     "filename": "999_9_1.jpg", 
     "line": [{ 
      "test": "test 1", 
      lineid: 22 
     }, 
     { 
      "test": "test 2", 
      lineid: 22 
     }, 
     { 
      "test": "test 3", 
      lineid: 22 
     }, 
     { 
      "test": "test 4", 
      lineid: 22 
     }, 
     { 
      "test": "blank", 
      lineid: 22 
     }] 
    }, 
    { 
     "filename": "999_9_2.jpg", 
     "line": [] 
    }] 
} 

我可以做的最多的事用線條像measurements.page[0].line[0].lineid;

但是我真的堅持是當我想編輯特定的行,但我只有可用lineid值(例如22),而不是陣列中的行號:

measurements.page[0].line[WHAT DO I PUT HERE].test = "new changed value"; 

回答

5

你必須尋找

function find_in_array(arr, name, value) { 
    for (var i = 0, len = arr.length; i<len; i++) { 
     if (name in arr[i] && arr[i][name] == value) return i; 
    }; 
    return false; 
} 

var id = find_in_array(measurements.page[0].line, 'lineid', 22); 
+0

輝煌得益於良好的感覺太命名喜歡它:-)大加讚賞:-) – davethecoder 2010-04-26 14:06:31

1

您通過陣列使用需要循環循環,直到找到您要找的物品。

1

您可以創建一個函數來做到這一點:

function getLinesByLineID(lines, id) { 
    var results = []; 
    for(var i = 0, j = lines.length; i < j; i++) { 
     if(lines[ i ].lineid === id) { 
      results.push(lines[ i ]); 
     } 
    } 
    return (results.length > 0) ? results : false; 
} 

然後你可以這樣調用:var lines = getLinesByID(json.page[0].line, 22);

+0

好一個已經添加了一個點上,但勞裏是快一點,在與發送搜索值輸入笑大加讚賞 – davethecoder 2010-04-26 14:07:19

相關問題