将数组中的对象移动到末尾

3

我希望能找到一种方法将一个对象移动到数组的最后

我有一个对象数组:

[{"id":"4","name":"Boaz"},{"id":"2","name":"Shareen"},{"id":"3","name":"Simon"},{"id":"1","name":"Miriam"}]

假设我有一个id:3或位置:2。我想将整个集合{"id":"3","name":"Simon"}移动到所有内容的末尾。我已经尝试了很多方法,并查找了很多资料,但我无法使其工作。

3
说你已经“寻找了很久”暗示着你已经进行了研究,但是如果没有展示(任何)你的尝试,这并没有帮助。你尝试过什么(即使是伪代码),以及哪里出了问题? - David Thomas
@Jon,别这样,我们不可能都是专家。我对对象/数组还是个新手,这有什么不好吗?我已经搜索了“jquery移动数组对象”和“javascript移动数组对象”之类的东西。 - mowgli
然后我搜索了“如何将刚刚删除的项目添加回数组末尾”,为什么不直接搜索可以同时实现两个功能的内容呢? - mowgli
2
@mowgli:当然成为新手没问题。但是对象数组和数组对象之间的区别是“相当重要”的。因此,我希望一个有良好意愿的新手首先掌握这个问题,然后再去问下一个问题。而不是“嘿,我想做<插入描述>,我不太确定如何将其转换为这里的代码,你能帮我做吗?” - Jon
1
这就是我的意思。如果你一开始无法理解,那么Q&A至少可以让你走95%的路程。有些答案在.prototype上放置了一个新函数,而其他答案则没有。数组中的对象唯一会产生影响的方式是如果你不知道如何从对象中获取属性。对于初学者来说,只需要简单的问题解决技巧即可完成此操作。 - cookie monster
显示剩余6条评论
2个回答

17
你可以使用 splice,然后使用 concat 来移除你想要的对象:
var array = [{"id":"4","name":"Boaz"},{"id":"2","name":"Shareen"},{"id":"3","name":"Simon"},{"id":"1","name":"Miriam"}];

var itemToReplace = array.splice(0, 1); // 0 is the item index, 1 is the count of items you want to remove.
// => [{"id":"4","name":"Boaz"}]

array = array.concat(itemToReplace);

或者更简单的说:

array = array.concat(array.splice(0, 1));

顺便一提:这是一个对象数组,而不是一个数组对象。


看起来不错又简单。我会试一试。对象数组……明白了。谢谢 ;) - mowgli
搞定了。事实证明,我还需要更改我使用的滑块的顺序...奇怪的是,我必须首先将default_id = -1设置,并在淡入之前递增(即使第一个数组位置为零也无法使用0)。但现在一切都好了,吓了一跳。谢谢。 - mowgli
但是为了使它工作,我不得不创建一个新数组:var newarray = array.concat(itemToReplace); - mowgli
你不需要创建一个新的数组,你可以将连接后的数组赋值给它的旧变量:array = array.concat(itemToReplace);。我会编辑我的答案来涵盖这一点。 - danguilherme
是的,那可以。DOM/引用也没问题吗?(我对此一无所知) - mowgli
显示剩余2条评论

5
你可以使用splice和concat数组方法,例如:
var arr = [{"id":"4","name":"Boaz"},{"id":"2","name":"Shareen"},{"id":"3","name":"Simon"},{"id":"1","name":"Miriam"}];
// Consider need move arr[2] to the end 
var removed = arr.splice(2,1);
var new_arr = arr.concat(removed);

1
使用.push()而不是.concat()来改变原始数据。 - cookie monster
.push() 方法会将被移除的元素作为一个数组添加,而不是添加这些元素本身。在这种情况下,它只有一个元素的数组,但是使用 .concat() 仍然是最好的选择,而不是使用 .push(removed[0]) 并且有可能在原始数组中添加一个 "undefined" 字符串。 - danguilherme
1
@Danguilherme:.concat不会改变原始数组,所以现在有两个不同的数组。即使他覆盖了arr变量,仍然可能存在其他引用原始数据的陈旧数据。这就是为什么应该使用.push()。自然需要提取正确的元素,或者只需使用arr.push.apply(arr, removed); - cookie monster
@cookiemonster:我明白你的意思,你是对的。 - danguilherme

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接