【发布时间】:2015-03-20 11:27:24
【问题描述】:
我有一个对象数组,其中一些元素是另一个元素的克隆,因此它们有一个引用原始属性的另一个属性的属性(简化示例):
var a = [{
id: 'x0',
name: 'Foo',
isClone: false,
wasCloned: true,
originalId: ''
}, {
id: 'y1',
name: 'Bar'.
isClone: false,
wasCloned: false,
originalId: ''
}, {
id: 'z2',
name: 'Foo',
isClone: true,
wasCloned: false,
originalId: 'x0'
}];
在这个例子中,第三个元素引用了第一个元素的 id - 这使得它在这个意义上是一个克隆。不幸的是,id 不是递增/按时间顺序排列的,基本上可以是任何随机字符串。
现在,手头的任务是以这样的方式对数组进行排序,以使克隆总是放置在数组位置的右侧之前其原始位置.如果数组元素不是克隆,则排序应照常进行。换句话说,一旦排序,此示例中的顺序将是 2,0,1。
我试图弄清楚如何为此使用Array.sort,但无法真正理解它。这基本上就是我所拥有的(不起作用):
var sortedA = a.sort(function(one, other) {
var sorted;
if (one.id == other.originalId) {
sorted = -1;
} else {
sorted = 0;
}
return sorted;
});
非常感谢您对此的任何帮助,谢谢。
【问题讨论】:
-
所以您不希望该数组中原始项目的顺序发生变化?然后我认为“排序”不是要走的路(因为当你“排序”整个数组时你将很难保持这个顺序),而是构建一个新数组。
-
您还需要将
one.originalId与other.id进行比较。 -
那么您希望按什么对原件进行排序?
-
返回
1怎么样?通常负数 (-1) 浮动到顶部,正数 (+1) 下沉到底部,并且相同 (0) 在排序时保持原位。 -
一个对象可以有多少个克隆?
标签: javascript arrays algorithm sorting