Javascript 筛选同一键上有多个值的数组
我尝试在jQuery中动态生成listview。这对整个列表非常有效,但现在我需要过滤/搜索/减少我的初始数据: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
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;ivar 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);
})