gpt4 book ai didi

javascript - 将元素数组移动到数组的另一个索引中

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:57:06 25 4
gpt4 key购买 nike

不确定这是否重复,但我在尝试考虑在充满元素数组的数组中移动元素的最佳方法时遇到了一些麻烦。

如:

var foo = [
[ {obj: 1}, {obj: 2}, {obj: 3}, {obj: 4} ],
[ {obj: 5}, {obj: 6}, {obj: 7}, {obj: 8} ],
[ {obj: 9}, {obj: 10}, {obj: 11}, {obj: 12} ]
];

如果我删除一个给定 arrayIndex 的元素,它会删除该元素,然后将所有后续元素向下移动到适当的数组。例如,如果我删除 obj 3,结果将是:

var arrayIndex = 0;
var objIndex = 2;

var bar = foo[arrayIndex].splice(objIndex, 1);

结果:

bar = [
[ {obj: 1}, {obj: 2}, {obj: 4}, {obj: 5} ],
[ {obj: 6}, {obj: 7}, {obj: 8}, {obj: 9} ],
[ {obj: 10}, {obj: 11}, {obj: 12} ]
];

另一个示例将如图所示删除对象 8:

var arrayIndex = 1;
var objIndex = 3;

var bar = foo[arrayIndex].splice(objIndex, 1);

结果:

bar = [
[ {obj: 1}, {obj: 2}, {obj: 3}, {obj: 4} ],
[ {obj: 5}, {obj: 6}, {obj: 7}, {obj: 9} ],
[ {obj: 10}, {obj: 11}, {obj: 12} ]
];

对我来说,问题是将所有进行中的元素移动到正确的数组位置。此外,我希望删除空数组。 foo 的长度会减少的地方。 foo 也会发生变异。

这是我尝试的 jsfiddle:https://jsfiddle.net/mLw8kncn/1/

如有任何帮助,我们将不胜感激。

最佳答案

一种简单的方法是将项目存储在一维数组而不是二维数组中。然后操作索引。

var foo = [ {obj: 1}, {obj: 2}, {obj: 3}, {obj: 4},
{obj: 5}, {obj: 6}, {obj: 7}, {obj: 8},
{obj: 9}, {obj: 10}, {obj: 11}, {obj: 12} ];

function remove(arrayIndex, objIndex) {
var realIndex = arrayIndex * 4 + objIndex;
foo.splice(realIndex, 1);
}

否则,您必须在每次拼接后重新排列项目。

function remove(arrayIndex, objIndex) {
foo[arrayIndex].splice(objIndex, 1);

for (var i = arrayIndex + 1; i < foo.length; i++) {
var obj = foo[i].shift();
foo[i - 1].push(obj);
}

if (foo[foo.length - 1].length <= 0) {
foo.pop();
}
}

这要复杂得多。

关于javascript - 将元素数组移动到数组的另一个索引中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com