Ваш вопрос заинтриговал меня, поэтому я попробовал это сделать в jsFiddle.Я думаю, что это должно работать довольно хорошо, и код является несколько кратким (без комментариев).Единственное предостережение в том, что он на самом деле не выполняет никакой проверки типов и может выдавать ошибку, поскольку «someData» не является массивом, если «fruit» не является массивом или если различные элементы в массиве «fruit» не былит правильные объекты.Но я не хотел слишком усложнять код и просто предположил, что вы будете уверены, что формат JSON соответствует вашему примеру.
http://jsfiddle.net/nG7BZ/
var checkFor = {
"someData": ["fruit", "type", "pear"],
"someMoreData": ["fruit", "color", "organge"],
"evenMoreData": ["vegetable", "type", "spinach"],
"lastBitOfData": ["vegetable", "color", "green"]
};
var checkIn = {
"fruit": [
{"type": "apple", "color": "red"},
{"type": "cherry", "color": "red"},
{"type": "pear", "color": "green"}],
"vegetable": [
{"type": "broccoli", "color": "green"},
{"type": "tomato", "color": "red"},]
};
// Loop through all the keys in checkFor and see they exist in checkIn
for(var name in checkFor) {
/*
Keys ( will be "someData, someMoreData, evenMoreData, etc" in no particular order
Grab each key (name) of checkFor and assign it to a variable (arr)
Assign indexes 0, 1, 2 of arr to parentKey, key, value - respectively
*/
var arr = checkFor[name], parentKey = arr[0], key = arr[1], value = arr[2];
// Check to see if for
var exists = forExistsIn(checkIn, parentKey, key, value);
// Write out our result
document.write(name+ " (" + arr + ") exists in checkIn => " + exists + "<br>");
}
/*
Checks for the parentKey in obj and then checks
to make sure obj[parentKey] contains at least 1 sub object whose
"key" === "value"
*/
function forExistsIn(obj, parentKey, key, value) {
return typeof obj[parentKey] !== "undefined" &&
obj[parentKey].filter(function(item) {
return item[key] === value;
}).length > 0;
}