【问题标题】:Move object in array to end [duplicate]将数组中的对象移动到结尾[重复]
【发布时间】:2014-08-25 02:00:36
【问题描述】:

我正在尝试找到一种将对象移动到数组末尾的方法

我有这个对象数组:

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

假设我有一个 id:3,或者一个位置:2。

我想将整个集合 {"id":"3","name":"Simon"} 移到它的末尾

我已经尝试了很多东西,并且搜索和搜索但我无法使其工作

【问题讨论】:

  • 说您已经“搜索和搜索”暗示您已经进行了研究,但未能展示(任何)您的尝试并没有帮助。您尝试过什么(即使是在伪代码中),哪里出了问题?
  • 具体是什么问题?你不知道如何从数组中删除一个项目吗?或者如何在末尾添加一个项目?这是两个非常基本的任务。我很难相信你在任何地方都找不到任何信息来告诉你如何做到这一点。
  • @Jon 来吧,我们不能都是专家。我是对象/数组的菜鸟,好吗?或者这样不行吗?我已经搜索了“jquery move array object”和“javascript move array object”之类的东西
  • @mowgli:当然,当个新手也没关系。但是数组对象和对象数组之间的区别是“有点重要”。所以我希望一个善意的新手能够首先确定这一点,然后再问下一个问题。不是“嘿,我想做 ,我不太确定这里的代码是如何转换的,你能帮我做吗?”
  • 这就是我的意思。如果您一开始无法弄清楚,那么 Q&A 至少应该让您完成 95% 的工作。一些答案在.prototype 上添加了一个新功能,而另一些则没有。如果您不知道如何从对象中获取属性,则数组中的对象会有所作为的唯一方法。初学者只需具备简单的解决问题的技能即可。

标签: javascript jquery arrays object


【解决方案1】:

你可以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));

顺便说一句:它是一个对象数组,而不是数组对象。

【讨论】:

  • 看起来又好又简单。会试试的。对象数组..明白了。谢谢;)
  • 搞定了。事实证明,我也需要更改我正在使用的滑块中的顺序.. 奇怪的是,我必须首先放置 default_id = -1 并在淡入淡出之前增加(即使第一个数组位置为零 hm,也不要使用 0)。但现在一切都好,呸。谢谢
  • 但为了让它工作,我必须创建一个新数组: var newarray = array.concat(itemToReplace);
  • 你不需要创建一个新数组,你可以将连接的数组分配给它的旧变量:array = array.concat(itemToReplace);。我将编辑我的答案以涵盖这一点。
  • 是的,这行得通。并且 DOM/references 可以吗? (我对此一无所知)
【解决方案2】:

您可以使用 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);

【讨论】:

  • .push(),而不是 .concat() 来改变原始版本。
  • .push() 将添加已删除项目的数组,而不是项目本身。在这种情况下,它是一个只有一项的数组,但 .concat() 仍然是最佳选择,而不是使用 .push(removed[0]) 并冒险在原始数组中添加“未定义”字符串。
  • @Danguilherme:.concat 不会改变原来的,所以现在有两个不同的数组。即使他覆盖了arr 变量,仍然可能有其他对原始数据的引用,这些引用引用了陈旧的数据。这就是为什么应该使用.push()。自然需要提取正确的元素,或者只是arr.push.apply(arr, removed);
  • @cookiemonster:我明白你的意思,你是对的。
猜你喜欢
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2022-08-18
  • 2011-12-10
  • 2021-11-16
相关资源
最近更新 更多