Javascript 按名称而不是默认的json/c排序数据#
所以我有一个网页,显示一些产品数据。在javascript文件中以json对象的形式调用数据:Javascript 按名称而不是默认的json/c排序数据#,javascript,c#,json,Javascript,C#,Json,所以我有一个网页,显示一些产品数据。在javascript文件中以json对象的形式调用数据: _loadAll: function (callback) { $.ajax({ 'type': 'GET', 'timeout': 5000, 'cache': false, 'dataType': 'json', 'url': Application.ProductURL + 'Series/Load/All'
_loadAll: function (callback) {
$.ajax({
'type': 'GET',
'timeout': 5000,
'cache': false,
'dataType': 'json',
'url': Application.ProductURL + 'Series/Load/All',
success: function (response) {
if (response && callback) {
callback(response);
}
},
error: function (request, errorText, errorCode) {
}
});
}
(注意:我从其他人那里接手了这个项目,所以只是整理一下,看看它是如何工作的)
我在c#中找到了如下所示的ProductURL:
我在另一个cs文件中找到的JSONObjects.jpProduct:
public class JProduct: IProduct
{
public int Id { get; set; }
public int SeriesId { get; set; }
public string Name { get; set; }
public void Load(string productNumber)
{
_product = new ProductProxy(productNumber);
Id = _product.Id;
SeriesId = _product.SeriesId;
Name = _product.Name;
}
因此,我的实际问题是:产品当前按其ID排序,我猜这是默认的。但是,我需要按名称对它们进行排序。我想我不能在javascript文件中这样做?我以前没有与JSON合作过,所以不确定。任何关于如何按名称排序的建议都将不胜感激 通常在这类代码中,您可以在大约3个级别中的任意一个级别进行排序: 1) 在数据源(例如SQL server)中,尤其是在使用LinqToSQL或EntityFramework时 2) 在服务器端加载数据后 3) 在客户端使用Javascript 一般来说,我会尽可能靠近数据进行排序,并且只有在我绝对必须这样做的情况下才在客户端进行排序。在这之前,有很多机会进行分类 您继承的数据层代码看起来并没有得到很好的实现,但请查看
ProductSeriesCollection.LoadAll
方法是如何工作的,因为这可能是您想要应用排序的地方。在最坏的情况下,您需要知道ProductSeriesCollection
如何工作,以便在调用LoadAll
后对内容进行排序
不过说真的,我强烈建议您为当前的数据层寻找L2S或EF替代品。然后,您可以在查询中添加一个OrderBy()
子句并完成它
由于无法在服务器上更改顺序,因此可以使用
Array.sort
方法在客户端修改对象的顺序
首先,定义一个比较方法,该方法将返回-1、0或1,具体取决于您希望比较项目的放置顺序。例如:
function compareProduct(a, b) {
if (a.Name < b.Name)
return -1;
if (a.Name > b.Name)
return 1;
return 0;
}
如果不是直接数组,请查找产品数组并对其调用sort。通常在这类代码中,您可以在大约3个级别中的任意一个进行排序: 1) 在数据源(例如SQL server)中,尤其是在使用LinqToSQL或EntityFramework时 2) 在服务器端加载数据后 3) 在客户端使用Javascript 一般来说,我会尽可能靠近数据进行排序,并且只有在我绝对必须这样做的情况下才在客户端进行排序。在这之前,有很多机会进行分类 您继承的数据层代码看起来并没有得到很好的实现,但请查看
ProductSeriesCollection.LoadAll
方法是如何工作的,因为这可能是您想要应用排序的地方。在最坏的情况下,您需要知道ProductSeriesCollection
如何工作,以便在调用LoadAll
后对内容进行排序
不过说真的,我强烈建议您为当前的数据层寻找L2S或EF替代品。然后,您可以在查询中添加一个OrderBy()
子句并完成它
由于无法在服务器上更改顺序,因此可以使用
Array.sort
方法在客户端修改对象的顺序
首先,定义一个比较方法,该方法将返回-1、0或1,具体取决于您希望比较项目的放置顺序。例如:
function compareProduct(a, b) {
if (a.Name < b.Name)
return -1;
if (a.Name > b.Name)
return 1;
return 0;
}
如果不是直接数组,请找到产品数组并对其调用sort。我想您应该查看
ProductSeriesCollection.LoadAll()
。尝试应用.OrderBy
linq expression over LoadAll()。我想您应该查看ProductSeriesCollection.LoadAll()
。尝试应用.OrderBy
linq expression over LoadAll()是的,我知道这并不理想,但我需要保持现状,直到我能说服所有者更仔细地改变事情。另一个问题是,数据层代码也会影响网站的其他部分,因此理想情况下,我会在Javascript中对其进行排序。在这种情况下,Array.sort
方法可能就是您所需要的。会更新的。是的,我知道这不太理想,但我需要保持现在的状态,直到我能说服业主更深思熟虑地改变事情。另一个问题是,数据层代码也会影响网站的其他部分,因此理想情况下,我会在Javascript中对其进行排序。在这种情况下,Array.sort
方法可能就是您所需要的。将更新。
function cmpProduct(a,b) { return a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0; }
success: function (response) {
if (response && callback) {
callback(response.sort(compareProduct));
}
},