gpt4 book ai didi

Javascript 使用 'pre year' 自定义按年份对对象数组进行排序

转载 作者:行者123 更新时间:2023-11-29 14:38:51 24 4
gpt4 key购买 nike

所以我有一个对象数组 ex:

var a = {user: [
{year:'1950',name:'Joe'},
{year:'19XX',name:'Chris'},
{year:'1980',name:'Bob'},
{year:'1955',name:'Jan'}
]}

我使用这些数据来模板化包含年份和名称的简单元素。我还可以通过选择元素对这些数据进行排序,然后使用 sorted 按排序顺序再次将其模板化。 (鲍勃、克里斯、简、乔)或年份。但我的问题从年份开始。

我需要继续使用一个简单的插件 jsonQ ( http://ignitersworld.com/lab/jsonQ.html )编辑和排序数据,并且需要年份数据实际上与 desc 或 asc 略有不同。

首先我需要编辑各个部分的数据,比如年份(19XX 应该变成“1950 年前”):

//inside ajax success function
var dataObj = jsonQ(data);

dataObj.find('year').value(function (data){
if (data == '19XX') {
return 'pre 1953'
} else {
return data;
}
});

现在我将有一个需要排序的最终产品数据集。

var orderedData = dataObj.sort('year', {'order' : 'ASC'});  

但这给了我返回的数据:

{
user: [
{year:'1950',name:'Joe'},
{year:'1955',name:'Jan'},
{year:'1980',name:'Bob'},
{year:'Pre 1950',name:'Chris'}
]
}

我需要的是返回的数据:

{
user: [
{year:'Pre 1950',name:'Chris'},
{year:'1950',name:'Joe'},
{year:'1955',name:'Jan'},
{year:'1980',name:'Bob'}
]
}

有什么建议吗?

最佳答案

那么,您可以实现自己的排序标准,并将其传递给 Array.sort() .

此标准采用 function(a, b) 的形式返回一个数字:

  • 否定 如果a应该在 b 之前在排序列表中
  • 如果ab本质上是平等的
  • 如果 a应该去 b

这可能看起来很武断,但可以这样想:在将数字从小到大排序的简单情况下,该函数返回 a - b。 .所以,f(a, b)a - b , 和 a - b < 0表示 a < b .

回到你的案例。让我们实现一个标准函数,将年份从小到大排序,将 Pre 1950在顶部:

function byYear(a, b) {
if (a === "Pre 1950") return -1 // a goes before
if (b === "Pre 1950") return 1 // b goes before

return parseInt(a) - parseInt(b) // lesser goes before
})

在浏览器控制台试试:

> ["1980", "1970", "Pre 1950"].sort(byYear)
["Pre 1950", "1970", "1980"]

鉴于您正在对对象进行排序,您需要调整上面的标准函数以使用 a.yearb.year .

关于Javascript 使用 'pre year' 自定义按年份对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41512693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com