编辑:冲销(N)(Underscore-)进行分类排列去除对象的属性
我录的用QuickTime的bug,为您的观赏乐趣。希望这可以帮助解决这个奇怪的问题。
https://www.dropbox.com/s/o72o1v1eqvrarb7/Weird%20Sorting%20Bug.mov?dl=0
更多的代码的详细信息,请参见:
https://www.pastebin.com/zUts9qmg
原题:
我有一个奇怪的问题。我使用Meteor开发应用程序,其中一个依赖项是Underscore.js。方便的小工具,但我遇到了一个奇怪的问题(错误,也许?)。
对一个对象数组排序可以正常工作,但是对它进行排序不会。当反转阵列时,数组内的对象的数据被删除...
我创建了一个带有粘性标题并动态添加表体的表。
点击其中一列在表格的标题激发了一些代码:
if (sortId != event.target.id) {
sortAsc = true;
sortId = event.target.id;
}
if (!sortAsc) {
requirements = _.sortBy(requirements, event.target.id).reverse();
} else {
requirements = _.sortBy(requirements, event.target.id);
}
sortAsc = !sortAsc;
CreateTable();
的sortId
是表示我们要作为排序依据哪个键的字符串。为了得到这个sortId
,我们看看event.target.id
,这是我们在表头中点击的项目的ID。 sortAsc
是一个布尔值,它将决定我们想要升序还是降序排序。 的requirements
是与所述数据阵列中的格式,如:
[
{
Status: "Something",
ID: 1,
Description: "Hahaha, yes!",
Category: "Category: Dairy",
segment: 1
},
{
//etc...
}
]
使用Underscore.js
,我与_.sortBy([collection], [property to sort by]);
对数组进行排序。这按预期工作。它使用提供的sortId
对数组中的所有对象进行排序。但是,在倒车时,它会删除属性在阵列中的所有对象,导致表中缺少一列,造型会失控:
正如你所看到的,在阵列反转之后,对象的status
属性消失。这适用于数组中的所有10个对象。
我试过基于硬编码属性进行排序,在_.sortBy
函数中使用“自定义”排序功能,但它们都具有相同的结果。即使颠倒标准的JavaScript排序.sort()
也会导致数据丢失。
有谁知道发生了什么事?难道我做错了什么?
所有帮助非常感谢!
我不认为问题是由'reverse'造成的。尝试在'requirements = _.sortBy(requirements,event.target.id).reverse();'之前和之后放置'console.log(JSON.stringify(requirements [0]));'以验证'reverse'是真正的原因。 –
结果:之前:“{”状态“:”延迟“,”ID“:107,”描述“:”能够根据Unify验证客户数据(以检查客户详细信息是否允许使用外部地址或外部备份地址) ),“Category”:“C1-SELL”,“segment”:1}和after:“{”ID“:346,”Description“:”支持客户账户的能力,包括但不限于不限于:在POS“,”Category“:”C12-PAY“,”segment“:1}'接收客户付款。 http://imgur.com/a/xgwKO –
@Magicbjørn这显然是一个不同的对象,从一个不同的位置。很可能在排序/反转之前它没有'.Status'。 – Bergi