代码之家  ›  专栏  ›  技术社区  ›  davethecoder

当我只知道一个项目属性的值时,如何从javascript数组中选择一个项目?

  •  3
  • davethecoder  · 技术社区  · 16 年前

    我有以下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";
    
    3 回复  |  直到 16 年前
        1
  •  5
  •   Lauri    16 年前

    你必须搜索

    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);
    
        2
  •  1
  •   SLaks    16 年前

    您需要使用 for 循环直到找到要查找的项目。

        3
  •  1
  •   Jacob Relkin    16 年前

    您可以创建一个函数来执行此操作:

    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 ) ;