Javascript 从数组到变量名的字符串列表
我正在抓取一个元素列表Javascript 从数组到变量名的字符串列表,javascript,arrays,json,Javascript,Arrays,Json,我正在抓取一个元素列表 var menus = $(".menu").map(function(){ return this.id; }); 返回类似于: ["lunch", "appetizers", "soup", "salads", "seafood", "noodles", "stir_fry", "curry", "kids", "steak", "dessert", "sides"] 对于数组中的每个项目,我想获取一些JSON数据
var menus = $(".menu").map(function(){
return this.id;
});
返回类似于:
["lunch", "appetizers", "soup", "salads", "seafood", "noodles", "stir_fry", "curry", "kids", "steak", "dessert", "sides"]
对于数组中的每个项目,我想获取一些JSON数据
$.each(menus,function(i) {
var list = menus[i],
meal = data.menu.list,
items = '<li><h3>' + meal.name + '</h3><p>' + meal.desc + '</p></li>';
$('#'+list+".menu").append(items);
});
有没有不涉及eval()的想法
编辑:
当我这样做时:
$.each(data.menu,function(i) {
console.log(data.menu[i].key);
});
控制台给了我:
Object {lunch: Array(14), appetizer: Array(11)}
我真正想要的就是访问这些阵列
console.log(data.menu[i].name)
给我一对未定义的。您的
$。每个函数应该是:
$.each(menus, function(i, list) { // the second parameter is list so we don't need menus[i]
var meal = data.menu[list], // use of bracket notation
items = '<li><h3>' + meal.name + '</h3><p>' + meal.desc + '</p></li>';
$('#' + list).append(items);
// ^^^ no need for the ".menu" as IDs alone are sufficient (assuming you have unique IDs, otherwise you have a problem)
});
$。每个(菜单,函数(i,list){//第二个参数是list,所以我们不需要菜单[i]
var MEIN=data.menu[list],//使用括号表示法
items=''+fine.name+''+fine.desc+' ';
$('#'+列表)。附加(项目);
//^^^^不需要“.menu”,因为只有ID就足够了(假设您有唯一的ID,否则您就有问题了)
});
MDN上的文档。如果要将JSON字符串解析为对象,请点击这里:
var jsonString='{“数据”:{“项”:{“id”:1,“值”:“foo”}};
var jsonObj=JSON.parse(jsonString);
log(jsonObj.data.item.value)这是一个很好的问题,先生!
无论您如何检索菜单
,strToVar()
都将完成此任务。
此代码将字符串从数组转换为变量名:
解决方案:
var strToVar=(str,val)=>this[str]=val;
例子:
var菜单=[“午餐”、“开胃菜”、“汤”、“沙拉”、“海鲜”、“面条”,
“炒菜”、“咖喱”、“儿童”、“牛排”、“甜点”、“配菜”];
菜单.forEach(strToVar);
提示(“午餐、开胃菜、汤、沙拉、海鲜、面条,”+
“炒菜、咖喱、儿童、牛排、甜点、配菜]”,
[午餐、开胃菜、汤、沙拉、海鲜、面条、,
炒菜、咖喱、儿童、牛排、甜点、配菜)代码>根据我的理解,您希望实现这样的目标:
var菜单=[“午餐”、“开胃菜”、“汤”、“沙拉”];
变量menuList=[
{
“姓名”:“午餐”,
“说明”:“说明1”
},
{
“名称”:“开胃菜”,
“说明”:“说明2”
},
{
“名称”:“汤”,
“说明”:“说明3”
},
{
“名称”:“沙拉”,
“说明”:“说明4”
}
]
var菜单={};
用于(菜单中的变量i){
菜单[菜单[i]=[{
“名称”:菜单列表[i]。名称,
“desc”:菜单列表[i]。说明
}];
}
控制台日志(菜单)代码>问题是,我不明白我真正想做什么。我问错了问题(虽然这是一个有趣的问题,所以我不提了)
我认为我需要从HTML ID生成变量列表,但这是一个错误。我需要的只是另一个for循环(或jQueryeach()
)
$每个(数据、菜单、功能(i){
变量列表=数据。菜单[i],
菜单=[];
$。每个(列表,函数(x){
var items=''+list[x]。name+''+list[x]。desc+' ';
菜单。推送(项目)
});
$('#'+i).附加(菜单);
});
eval在哪里?你想做什么?JSON应该来自哪里?ibrahim,我看到的很多关于将字符串转换为变量名的答案都建议使用eval(),我不想这样做,因为eval()sux.Matt,JSON来自代码前面的ajax调用。当我写了一些类似于sunch\u menu=data.menu.sunch的东西时,它工作得很好,但我不想重复代码十次。那么这是一个重复:它不是一个死者。@AbsynthesistedWebsmith那么根本不需要它,因为只有ID就足够了。这很接近,但您还错过了一个附加层。“菜单”:{“午餐”:[{“姓名”:“高帕德”,“描述”:“等”},。。。
$.each(menus, function(i, list) { // the second parameter is list so we don't need menus[i]
var meal = data.menu[list], // use of bracket notation
items = '<li><h3>' + meal.name + '</h3><p>' + meal.desc + '</p></li>';
$('#' + list).append(items);
// ^^^ no need for the ".menu" as IDs alone are sufficient (assuming you have unique IDs, otherwise you have a problem)
});
$.each(data.menu, function(i) {
var list = data.menu[i],
menus = [];
$.each(list, function(x) {
var items = '<li><h3>' + list[x].name + '</h3><p>' + list[x].desc + '</p></li>';
menus.push(items)
});
$('#' + i).append(menus);
});