Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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-Insert&;删除对象中的元素_Javascript_Javascript Objects - Fatal编程技术网

JavaScript-Insert&;删除对象中的元素

JavaScript-Insert&;删除对象中的元素,javascript,javascript-objects,Javascript,Javascript Objects,我有一个目标 var dl_items; 在输入数据的循环之后: dl_items[code] = itemObject; 我有一个数组: dl_items : { "code_A" : { "index" : 1, "status" : 2, "name" : A_data}, "code_B" : { "index" : 2, "status" : 0, "name" : B_data}, "code_C" : {

我有一个目标

var dl_items;
在输入数据的循环之后:

dl_items[code] = itemObject;
我有一个数组:

dl_items : {
            "code_A" : { "index" : 1, "status" : 2, "name" : A_data},
            "code_B" : { "index" : 2, "status" : 0, "name" : B_data},
            "code_C" : { "index" : 3, "status" : 1, "name" : C_data},
            "code_D" : { "index" : 4, "status" : 2, "name" : D_data},
            "code_E" : { "index" : 5, "status" : 4, "name" : E_data}
           }
现在我想删除“dl_items[code_D]”,并将其插入到“code_A”(索引2)之后,得到如下结果:

 dl_items : {
            "code_A" : { "index" : 1, "status" : 2, "name" : A_data},
            "code_D" : { "index" : 4, "status" : 2, "name" : D_data},
            "code_B" : { "index" : 2, "status" : 0, "name" : B_data},
            "code_C" : { "index" : 3, "status" : 1, "name" : C_data},                
            "code_E" : { "index" : 5, "status" : 4, "name" : E_data}
            }
在使用循环查找代码的索引后,我尝试使用“delete”:

delete dl_items[code_D];
它成功地被删除了,但是我怎样才能将代码插入到他的新索引中呢


编辑:感谢所有人帮助我了解更多有关阵列的信息。

您可以制作如下的临时变量:

tempItem = dl_items.code_D;
dl_items.code_D = dl_items.code_B;
dl_items.code_B = tempItem;

这里有一个对象,而不是数组。因此,这里没有索引的概念。 可以将对象关键帧映射到数组中,如下所示:

 let array = Object.keys(dl_items);

然后可以重新排列它们的位置。

因为对象没有顺序,所以需要将当前实现转换为数组:

var dl_items = [];
需要将项目添加到阵列时:

dl_items.push({ code: code, item: itemObject });
现在,与您的问题中的数组类似的数据是:

dl_items: [
            { code :"code_A", item: { index: 1, status: 2, name: "A_data" } },
            { code :"code_B", item: { index: 2, status: 0, name: "B_data" } },
            { code :"code_C", item: { index: 3, status: 1, name: "C_data" } },
            { code :"code_D", item: { index: 4, status: 2, name: "D_data" } },
            { code :"code_E", item: { index: 5, status: 3, name: "E_data" } },
          ]
要将带有代码_D的条目移动到带有代码_A的条目之后,请使用以下命令:

var codeDEntry = dl_items[3];
dl_items = dl_items
    .filter(function(entry) {
        return entry !== codeDEntry;
    })
    .splice(1, 0, codeDEntry);

希望这有帮助

基本上是用对象显示对象。对象中的属性实际上没有顺序。您可以对已订购的项目使用数组。这既不是数组,也不是数组
dl_items
是一个请更正你的arrayas@NinaScholz说,你可以使用一个数组,它将保存对象,这样你就可以轻松地重写你想要的索引
array[3]={状态:2,名称:d_data}
,在javascript中数组是一个对象。这与JSON无关。JSON是一种用字符串编码数据的方法。我能问一下为什么使用
unshift
?在w3school中,它说
unshift
用于将项添加到数组的开头。我想你的新数组是:D,A,B,C,E?如果我错了,请纠正我:对不起,你完全正确。我没有正确地阅读这个问题。我修正了我的答案,谢谢。现在我将重构我的代码结构很多:DGlad我可以帮忙。