Javascript 筛选同一键上有多个值的数组

Javascript 筛选同一键上有多个值的数组,javascript,jquery,Javascript,Jquery,我尝试在jQuery中动态生成listview。这对整个列表非常有效,但现在我需要过滤/搜索/减少我的初始数据: var rezepte = [ { "name" : "Eierkopf" , "zutaten" : ["Eier", "Zucker"] , "zubereitung" : "alles schön mischen." }, { "name" : "Käseschnitte" , "zutaten" : ["Käse", "Brot", "Paprika"] , "zuberei

我尝试在jQuery中动态生成listview。这对整个列表非常有效,但现在我需要过滤/搜索/减少我的初始数据:

var rezepte = [
{ "name" : "Eierkopf" , "zutaten" : ["Eier", "Zucker"] , "zubereitung" : "alles schön mischen." },
{ "name" : "Käseschnitte" , "zutaten" : ["Käse", "Brot", "Paprika"] , "zubereitung" : "Käse drauf und in den Ofen" },
{ "nme" : "Gemüse-Auflauf" , "zutaten" : ["Lauch"] , "zubereitung" : "1. schneiden 2. Kochen 3. essen" }
];
我想通过搜索数组过滤/搜索“配方”,如
var searcharray=[“Zucker”,“Paprika”]
,结果是:

var result = [
{ "name" : "Eierkopf" , "zutaten" : ["Eier", "Zucker"] , "zubereitung" : "alles schön mischen." },
{ "name" : "Käseschnitte" , "Zutaten" : ["Käse", "Brot", "Paprika"] , "zubereitung" : "Käse drauf und in den Ofen" }];
我在for循环中尝试了很多东西:过滤、映射、推送——但都没有成功,总是导致未定义的对象

我也不确定我的配方数组应该是什么样的语法:必须存在“成分”数量可变的可能性

任何帮助和暗示都将不胜感激

非常感谢,
Andi

使用本机数组函数,应该可以:

result = recipes.filter(function(recipe) {
    return search.any(function(ingredient) {
        return recipe.ingredients.indexOf(ingredient) != -1;
    });
});
使用jQuery,它将是

result = $.grep(recipes, function(recipe) {
    for (var i=0; i<search.length; i++)
        if ($.inArray(recipe.ingredients, search[i]) != -1)
            return true;
    return false;
});
result=$.grep(配方,函数(配方){
对于(var i=0;i
var rezepte=[
{“姓名”:“艾尔科普夫”,“祖塔坦”:[“艾尔”,“祖克”],“祖伯雷顿”:“阿莱斯·肖恩·米森”。},
{“姓名”:“Käseschnitte”,“zutaten”:[“Käse”,“Brot”,“Paprika”],“Zuberitung”:“Käse drauf und in den of en”},
{“nme”:“Gemüse Auflauf”,“zutaten”:[“Lauch”],“zubereitung”:“1.施耐登2.科兴3.埃森”}
];
函数搜索(){
var search=$(“#searchfield”).val();//返回字符串
var searcharray=search.split(',');
如果(searcharray==“”){
检查=$.isArray(searcharray);
警告(检查);//正确
返回rezepte;
}否则{
var结果=[];
警惕(“直到这里罚款”);
结果=$.grep(rezepte,函数(rezept){

对于(var i=0;我能不能请你展示给你未定义对象的代码?为了澄清你的问题:你想要那些数组条目,其中至少有一个数组
search
条目在对象的嵌入数组
contracents
中?@Philipp:是的,确切地说:数组搜索的至少一个条目在contracents中。@FAngel:这是是我尝试的一部分:var result=[];//var temp=[];//$.each(searcharray,function(index,value){或for(var I=0;i@FAngel目前未定义的对象没有问题-我甚至还没有到那里:-)请参阅更新的问题。谢谢。您没有收到警报,因为函数
返回
就在它前面。请注意,
typeof[]
“object”
,因为所有javascript数组都是对象,只有对于基本值(字符串、数字、未定义的…)您会收到其他值。您可以测试对象是否是具有(跨浏览器)。感谢您的帮助。已更新问题并删除评论。FAngel的评论是指我之前尝试的内容(过时)。未定义的对象不再存在问题。当前的问题是我想实现$.grep()你给我看了.Thx,我觉得不错,但是把警报放在for循环之前或者
$.grep
之后。如果你没有得到正确的搜索结果,你也可以调整你的
searcharray
创建,目前单词可能包含空格等。太好了!在我的jQuery项目中工作得很好。问题已经解决,可以学习了谢谢大家,干杯,安迪
var rezepte = [
{ "name" : "Eierkopf" , "zutaten" : ["Eier", "Zucker"] , "zubereitung" : "alles schön mischen." },
{ "name" : "Käseschnitte" , "zutaten" : ["Käse", "Brot", "Paprika"] , "zubereitung" : "Käse drauf und in den Ofen" },
{ "nme" : "Gemüse-Auflauf" , "zutaten" : ["Lauch"] , "zubereitung" : "1. schneiden 2. Kochen 3. essen" }
];

function search() {
    var search = $("#searchfield").val(); // returns string
    var searcharray = search.split(',');
    if (searcharray == "") {
        check = $.isArray(searcharray);
        alert(check); // true
        return rezepte;
    } else { 
        var result = [];
        alert("till here fine");
        result = $.grep(rezepte, function(rezept) {
            for (var i=0; i<searcharray.length; i++) {
                if ($.inArray(searcharray[i], rezept.zutaten) != -1)
                    return true;
            } 
             return false;
        });
    }
    console.log(result);
    return result;  
}
$(function(){
     $("#search").click(search);
})