Корреляция базы данных JavaScript
Я пытался "коррелировать" между выбранными пользователем ответами и именем свойства объекта, чтобы, если они совпадали, отображалось то, что внутри.
Моя программа - это средство поиска рецептов, которое возвращает рецепт, состоящий из ингредиентов, выбранных пользователем. мой код в настоящее время выглядит так:
// свойство - это ингредиенты, а значение - рецепты, содержащие эти ингредиенты. Карта генерируется автоматически
``var map = {
"pork" : [recipe1, recipe2, ...],
"beef" : [],
"chicken" :[],
}
// это выбирает пользователя из домена
var cucumber = specificVegetable[7];
var lemon = specificFruits[0];
// Затем этот код находит пересечение рецепта (рецепты, которые используют более одного ингредиента)
function intersect(array1, array2)
{
return array1.filter(function(n) {
return array2.indexOf(n) != -1
});
}
var recipiesWithLemon = map["lemon"]; **// makes the lemon object is map**
var recipiesWithCucumber = map["cucumber"]; **// makes the cucumber object in map**
// Вот где я застрял
function check(){
var both = intersect(recipiesWithLemon, recipiesWithCucumber);
if ( cucumber.checked && lemon.checked){
for (var stuff in map){
if(stuff="cucumber" && stuff="lemon"){
return both;
}
}
}
}
check();
так что в основном я пытался сделать так, чтобы я пересекся, а затем, если пользователь выбрал лимон и огурец, взглянул на свойства объекта карты. если имя свойства равно точной строке, вернуть оба. Это был план, но код не работает, и я не уверен, как это исправить.
Я планирую написать код для каждого возможного результата, который может сделать пользователь, поэтому мне нужно найти корреляцию между выбором пользователя и картой, на которой хранится рецепт. Я понимаю, что это не самый эффективный способ, но я озадачен тем, как сделать это по-другому.
Спасибо за помощь.
1 ответ
Я использую проект с открытым исходным кодом jinqJs, чтобы упростить процесс. Я также изменил вашу карту на массив объектов JSON. Если вам нужен объект карты не в виде массива, дайте мне знать. Я изменю пример кода.
var map = [
{"pork" : ['recipe1', 'recipe2']},
{"beef" : ['recipe3', 'recipe4']},
{"peach" :['recipe5', 'recipe6']},
{"carrot" :['recipe7', 'recipe8']}
];
var selectedFruit = 'peach';
var selectedVeggie = 'carrot';
var selections = [selectedFruit, selectedVeggie];
var result = jinqJs().from(map).where(function(row){
for(var f in row) {
if (selections.indexOf(f) > -1)
return true;
}
return false;
}).select();
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>