Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 如何从jQuery排序表(嵌套列表)处理多维数组?_Javascript_Jquery_Json_Jquery Ui Sortable - Fatal编程技术网

Javascript 如何从jQuery排序表(嵌套列表)处理多维数组?

Javascript 如何从jQuery排序表(嵌套列表)处理多维数组?,javascript,jquery,json,jquery-ui-sortable,Javascript,Jquery,Json,Jquery Ui Sortable,我正在使用jQuery Sortable创建一些带有嵌套列表的代码块(用于循环和函数块),然后我在console.log(jsonString)上使用json.stringify获得了这个json字符串: 以下是我在jQuery排序表示例中的代码: let oldContainer, codeBlockId, codeBlockItem; $("ol.nest_workspace").sortable({ group: 'nested', onDragStart: functi

我正在使用jQuery Sortable创建一些带有嵌套列表的代码块(用于循环和函数块),然后我在console.log(jsonString)上使用json.stringify获得了这个json字符串:

以下是我在jQuery排序表示例中的代码:

let oldContainer, codeBlockId, codeBlockItem;

$("ol.nest_workspace").sortable({
    group: 'nested',
    onDragStart: function ($item, container, _super) {
    // Duplicate items of the no drop area
    if(!container.options.drop)
      $item.clone().insertAfter($item);
    _super($item, container);
  },
    afterMove: function (placeholder, container) {

        if(oldContainer != container){
            if(oldContainer)
                oldContainer.el.removeClass("active");
            container.el.addClass("active");

            oldContainer = container;
        }
    },
    onDrop: function ($item, container, _super) {
        container.el.removeClass("active");

        $item.addClass("block_code_on_workspace");

        var data = group.sortable("serialize").get();

    var jsonString = JSON.stringify({"codes":data}, null, '\t');
        console.log(jsonString);
        _super($item, container);

    },


});
如何处理子数组(子数组[])

我计划将它全部阻塞为一个真正的代码,这样它就可以用另一个函数执行

我可能期望文本输出打印一些函数,如moveUp(),或者如果其循环中包含一些函数,则如下所示:

for (var i = 0; i < 3; i++) { 
  moveUp();
}
(变量i=0;i<3;i++)的

moveUp();
}

任何帮助或建议都会很好,谢谢

如果您的JSON字符串总是这样。然后你可以像这样瞄准这些“子”数组

我只根据上面的JSON格式编写了这段代码

const childrenArr = jsonString.codes[0][1].children;
根据我们正在编写的代码,您正在对数据进行字符串化,此代码应该可以工作

var jsonString=JSON.stringify({“code”:data},null,'\t'); log(jsonString),
ChildrenArr=jsonString.code[0][1]。children;

如果您的JSON字符串始终是这样的,那么您可以像这样将“children”数组作为目标

我只根据上面的JSON格式编写了这段代码

const childrenArr = jsonString.codes[0][1].children;
根据我们正在编写的代码,您正在对数据进行字符串化,此代码应该可以工作

var jsonString=JSON.stringify({“code”:data},null,'\t'); log(jsonString),
ChildrenArr=jsonString.code[0][1].children;

我找到了解决问题的方法,下面是代码:

$("ol.nest_workspace").sortable({
    group: 'nested',
    onDragStart: function ($item, container, _super) {
    // Duplicate items of the no drop area
    if(!container.options.drop)
      $item.clone().insertAfter($item);
            if($item.hasClass('RepeatCode')){
                $item.attr('id','block_loop_function_drag');
            }
    _super($item, container);
  },
    afterMove: function (placeholder, container) {

        if(oldContainer != container){
            if(oldContainer)
                oldContainer.el.removeClass("active");
            container.el.addClass("active");

            oldContainer = container;
        }
    },
    onDrop: function ($item, container, _super) {
        $(".coding-script").empty();
        container.el.removeClass("active");

        $item.addClass("block_code_on_workspace");
        $hasID = document.getElementById('block_loop_function_drag');


        var data = group.sortable("serialize").get();
        // console.log(data);

        for(var i = 0; i < data[0].length; i++){

            if($hasID){
                $item.attr('id','block_loop_function_'+i+'');
            }

            var obj = data[0][i];
            if(obj.hasOwnProperty("children")){

                var objChildren = obj.children[0];

                console.log(obj.code +'-'+i);
                ConvertToCodeScripts(obj.code, i);

                for(var j = 0; j < objChildren.length; j++){
                    console.log('loop-'+i+'-'+objChildren[j].code);
                    ConvertToCodeScripts('loop-'+i+'-'+objChildren[j].code, i);
                }

            }
            else{
                console.log(obj.code);
                ConvertToCodeScripts(obj.code, i);
            }
            console.log('lha - '+i);
        }
        _super($item, container);

    },
});
$(“ol.nest\u工作区”)。可排序({
组:“嵌套”,
onDragStart:function($item,container,_super){
//禁止放置区域的重复项
如果(!container.options.drop)
$item.clone().insertAfter($item);
if($item.hasClass('RepeatCode')){
$item.attr('id','block\u loop\u function\u drag');
}
_超级(物品、容器);
},
后置移动:功能(占位符、容器){
如果(旧容器!=容器){
如果(旧容器)
oldContainer.el.removeClass(“活动”);
容器el.addClass(“活动”);
oldContainer=容器;
}
},
onDrop:function($item,container,_super){
$(“.coding script”).empty();
容器el.removeClass(“活动”);
$item.addClass(“工作区上的块代码”);
$hasID=document.getElementById('block\u loop\u function\u drag');
var data=group.sortable(“序列化”).get();
//控制台日志(数据);
对于(var i=0;i
但如果你们有更好的解决方案,请告诉我


干杯

我找到了解决问题的方法,下面是代码:

$("ol.nest_workspace").sortable({
    group: 'nested',
    onDragStart: function ($item, container, _super) {
    // Duplicate items of the no drop area
    if(!container.options.drop)
      $item.clone().insertAfter($item);
            if($item.hasClass('RepeatCode')){
                $item.attr('id','block_loop_function_drag');
            }
    _super($item, container);
  },
    afterMove: function (placeholder, container) {

        if(oldContainer != container){
            if(oldContainer)
                oldContainer.el.removeClass("active");
            container.el.addClass("active");

            oldContainer = container;
        }
    },
    onDrop: function ($item, container, _super) {
        $(".coding-script").empty();
        container.el.removeClass("active");

        $item.addClass("block_code_on_workspace");
        $hasID = document.getElementById('block_loop_function_drag');


        var data = group.sortable("serialize").get();
        // console.log(data);

        for(var i = 0; i < data[0].length; i++){

            if($hasID){
                $item.attr('id','block_loop_function_'+i+'');
            }

            var obj = data[0][i];
            if(obj.hasOwnProperty("children")){

                var objChildren = obj.children[0];

                console.log(obj.code +'-'+i);
                ConvertToCodeScripts(obj.code, i);

                for(var j = 0; j < objChildren.length; j++){
                    console.log('loop-'+i+'-'+objChildren[j].code);
                    ConvertToCodeScripts('loop-'+i+'-'+objChildren[j].code, i);
                }

            }
            else{
                console.log(obj.code);
                ConvertToCodeScripts(obj.code, i);
            }
            console.log('lha - '+i);
        }
        _super($item, container);

    },
});
$(“ol.nest\u工作区”)。可排序({
组:“嵌套”,
onDragStart:function($item,container,_super){
//禁止放置区域的重复项
如果(!container.options.drop)
$item.clone().insertAfter($item);
if($item.hasClass('RepeatCode')){
$item.attr('id','block\u loop\u function\u drag');
}
_超级(物品、容器);
},
后置移动:功能(占位符、容器){
如果(旧容器!=容器){
如果(旧容器)
oldContainer.el.removeClass(“活动”);
容器el.addClass(“活动”);
oldContainer=容器;
}
},
onDrop:function($item,container,_super){
$(“.coding script”).empty();
容器el.removeClass(“活动”);
$item.addClass(“工作区上的块代码”);
$hasID=document.getElementById('block\u loop\u function\u drag');
var data=group.sortable(“序列化”).get();
//控制台日志(数据);
对于(var i=0;i
但如果你们有更好的解决方案,请告诉我

Cheers

导致此错误的[0]是:“无法读取未定义的属性“0”。有建议吗?导致此错误的[0]是:“无法读取未定义的属性“0”。有建议吗?