【发布时间】:2016-12-29 17:22:09
【问题描述】:
我有一个名为 specials 的对象数组,每个对象看起来像这样:
{
apr_rate:"",
client_id:"",
disclaimer:",
lease_payment: "",
make:"",
model:"",
name:"",
platform:"",
price:"",
specialOrder:"",
specialStyle: "",
trim:"",
visible:"",
website:"",
year:"",
}
我有一个循环遍历数组中的每个对象并检查lease_payment 属性是否为空。在这种情况下,我将该特定对象从数组中拼接出来,将其存储在一个名为tempObj 的新对象中,然后将其推入一个名为tempArray 的新数组中。我拼接的原因是因为我需要先按lease_payment升序排列这个对象数组——当没有租赁付款时,它需要按price升序排列剩余的对象。但是,价格排序需要在租赁排序之后发生。见下文:
if (specials[i].lease_payment == "") {
tempObj = specials.splice(i, 1);
tempArray.push(tempObj);
} else {
// else just assume they're all lease offers and sort by lease payment
specials.sort(function(a, b) {
return a.lease_payment - b.lease_payment
});
}
然后我检查新数组 tempArray 是否有 1 个或多个对象。如果只有 1 个,我立即将它推回主 specials 数组,它会在后面;也没有其他对象可以比较它和排序。如果有多个对象,我会根据升序对这些对象重新排序,然后将它们单独推送到specials 数组中,因为它们需要被视为拥有自己的对象。见下文。
if (tempArray.length == 1) {
specials.push({tempArray});
} // else just sort the temp array by ascending price, push into main specials later
else if (tempArray.length > 1) {
tempArray.sort(function(a, b) {
return a.price - b.price
});
// grabs each individual object within temp array and pushes one at a time into main specials
for (i = 0; i < tempArray.length; i++) {
specials.push(tempArray[i]);
}
}
发生的情况是,无论哪种情况,每当我将一个对象推回specials 数组时,它都会嵌套在另一个数组中,如下图所示:
在本例中,5 个特殊对象中的两个被取出、排序并放回。但是,它们现在嵌套在一个数组中。
我是否遗漏了什么或做错了什么?任何帮助将不胜感激。
【问题讨论】:
-
首先,如果for循环结束,则排序(这对性能更好)
-
您可以以紧凑的方式添加一些数据和想要的排序结果。
-
是
lease_payment一个空字符串和一个数字作为字符串,还是只是一个字符串,带有一些字母?请通过一些示例添加您的数据。
标签: javascript arrays sorting object