2015-04-29 18 views
14

tôi nhận được bên dưới mảng của các đối tượng JSON từ JSPtìm một giá trị bên trong mảng của JSON đối tượng

"Titles":[       
    { 
    "Book3" : "BULLETIN 3" 
    } 
    , 
    { 
    "Book1" : "BULLETIN 1" 
    } 
    , 
    { 
    "Book2" : "BULLETIN 2" 
    }  
] 

Về phía JS, nó được phân tách và tôi thấy một mảng với 3 đối tượng. Bây giờ, tôi muốn tìm/xác định một giá trị khi tôi vượt qua phím Chuỗi.

Ví dụ: khi tôi vượt qua "Book2" tôi sẽ nhận được giá trị "BULLETIN 2". Ai đó có thể giúp tôi xác định phương pháp tiếp cận không?

Trả lời

8

Hãy thử điều này

var data = { 
 
    "Titles": [{ 
 
     "Book3": "BULLETIN 3" 
 
    }, { 
 
     "Book1": "BULLETIN 1" 
 
    }, { 
 
     "Book2": "BULLETIN 2" 
 
    }] 
 
}; 
 

 
function getValueByKey(key, data) { 
 
    var i, len = data.length; 
 
    
 
    for (i = 0; i < len; i++) { 
 
     if (data[i] && data[i].hasOwnProperty(key)) { 
 
      return data[i][key]; 
 
     } 
 
    } 
 
    
 
    return -1; 
 
} 
 

 
console.log(getValueByKey('Book2', data.Titles));

1

Hãy tạo một chức năng để có được một đối tượng trong một mảng cho rằng, đó có hai đối số: mảng và chìa khóa của tài sản bạn muốn nhận được :

function getObjectInArray(arr, key) {  
    for (var i = 0; i < arr.length; i++) { 
     if (arr[i].hasOwnProperty(key)) return arr[i][key]; 
    } 
} 

Vòng lặp này qua từng đối tượng tìm khóa cụ thể đó.


Giải pháp: Bây giờ bạn có thể làm một cái gì đó giống như getObjectInArray(titlesJSONArray, "Book2") và nó sẽ trở về "BẢN TIN 2".

var titlesJSONArray = [ { "Book3": "BULLETIN 3" }, ... ]; // and so on 
var book2 = getObjectInArray(titlesJSONArray, "Book2"); // => "BULLETIN 2" 
4

Có:

var x = [{ 
    "Book3" : "BULLETIN 3" 
}, { 
    "Book1" : "BULLETIN 1" 
}, { 
    "Book2" : "BULLETIN 2" 
}]; 

var key = "Book1"; 

Bạn có thể nhận được giá trị sử dụng:

x.filter(function(value) { 
    return value.hasOwnProperty(key); // Get only elements, which have such a key 
}).shift()[key]; // Get actual value of first element with such a key 

Chú ý rằng nó sẽ ném một ngoại lệ, nếu đối tượng doesn không có một chìa khóa được xác định.

Ngoài ra, nếu có nhiều đối tượng hơn với khóa như vậy, thì chỉ trả lại giá trị đầu tiên. Nếu bạn cần nhận tất cả các giá trị từ các đối tượng có khóa như vậy, bạn có thể làm:

x.filter(function(value) { 
    return value.hasOwnProperty(key); // Get only elements, which have such a key 
}).map(function(value) { 
    return value[key]; // Extract the values only 
}); 

Điều này sẽ cung cấp cho bạn một mảng chứa các giá trị thích hợp.

Ngoài ra, nếu bạn đang sử dụng jQuery, bạn có thể sử dụng grep thay vì filter:

jQuery.grep(x, function(value) { 
    return value.hasOwnProperty(key); 
}) /* and so on */; 
3

Để đạt được điều này, bạn phải lặp qua phím và kiểm tra các phần tử mảng nếu chìa khóa trao tồn tại trong mảng, nếu có thì nhận được giá trị của nó:

var jsonTitles = [       
 
      { "Book3" : "BULLETIN 3" }, 
 
      { "Book1" : "BULLETIN 1" }, 
 
      { "Book2" : "BULLETIN 2" }  
 
     ] 
 

 
    function getValue(key, array) { 
 
     for (var el in array) { 
 
      if (array[el].hasOwnProperty(key)) { 
 
       return array[el][key]; 
 
      } 
 
     } 
 
    } 
 

 
alert(getValue("Book1", jsonTitles));

W e sử dụng element[key] trong đó element is array[el] để nhận giá trị của key nhất định.

1

Để thao tác mảng/tập hợp như vậy trong Javascript, tôi khuyên bạn nên sử dụng thư viện underscorejs. Nó cung cấp các chức năng mà, với tôi, làm mọi thứ đơn giản hơn nhiều. Trong trường hợp của bạn:

function find_value(array, key) { 
    // find will run the provided function for every object in array 
    var obj_found = _.find(array, function(obj) { 
     // keys returns the keys inside an object 
     // so if the key of currently examined object 
     // is what we are looking for, return the obj 
     if (_.keys(obj)[0] === key) { 
      return obj; 
     } 
    }); 
    // if an object with such key was found return its value 
    if (obj_found) { 
     return obj_found[key]; 
    } else { 
     return null; 
    } 
} 

Here là công cụ hữu ích về những gì tôi đề xuất.

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