Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数组到变量名的字符串列表_Javascript_Arrays_Json - Fatal编程技术网

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循环(或jQuery
    each()

    $每个(数据、菜单、功能(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);
        });