Javascript 如何从jQuery排序表(嵌套列表)处理多维数组?
我正在使用jQuery Sortable创建一些带有嵌套列表的代码块(用于循环和函数块),然后我在console.log(jsonString)上使用json.stringify获得了这个json字符串: 以下是我在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
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”。有建议吗?