gpt4 book ai didi

Javascript对对象数组进行排序未执行

转载 作者:行者123 更新时间:2023-12-03 07:52:04 24 4
gpt4 key购买 nike

我必须对对象数组进行排序,并且我已经编写了代码,但它只是不执行。该数组是相同的,当我查看调试器控制台时,它会直接跳到下一个函数并且不执行我的排序。我尝试了很多方法,但似乎没有任何效果。也许我忽略了一些东西,但我希望有人知道为什么它不执行。

我的代码:

function orderData(toSort) {
console.dir(toSort);
toSort.sort(compareCountries);

console.dir(toSort);
return toSort;
}
function compareCountries(a, b) {
var avgx = 0;
var avgy = 0;

avgx = calcAvgForAllProperties(a, avgx);
avgy = calcAvgForAllProperties(b, avgy);

a["overalAvg"] = avgx;
b["overalAvg"] = avgy;

if (a.overalAvg > b.overalAvg)
return -1;
else if (b.overalAvg < a.overalAvg)
return 1;
else
return 0;
}

或者:

function orderData(toSort) {
console.dir(toSort);
toSort.sort(function (a, b) {
var avgx = 0;
var avgy = 0;

avgx = calcAvgForAllProperties(a, avgx);
avgy = calcAvgForAllProperties(b, avgy);

a["overalAvg"] = avgx;
b["overalAvg"] = avgy;

if (a.overalAvg > b.overalAvg)
return -1;
else if (b.overalAvg < a.overalAvg)
return 1;
else
return 0;
});

console.dir(toSort);
return toSort;
}

//编辑这是我的数据示例:

Data example

最佳答案

您的代码存在几个问题:

  1. 排序函数有副作用

你不应该计算overallAvgcompareCountries 。相反,您应该在排序之前执行此操作。

    var countries = [ /* your countries */ ];

countries.forEach(calculateCountryOverallFooAverage); // Standard forEach is not chainable.
countries.sort(compareCountriesByOverallFooAverage);

function calculateCountryOverallFooAverage(country) {
country.calculateOverallFooAverage();
}

function compareCountriesByOverallFooAverage(lhs, rhs) {
var lhsAvg = lhs.overallFooAverage();
var rhsAvg = rhs.overallFooAverage();

if (lhsAvg < rhsAvg) { return -1; }
else if(lhsAvg > rhsAvg) { return 1; }
return 0;
}
  • 比较不正确,因为第二个测试与第一个测试等效(您执行 if (a < b) {} else if (b > a) {} else {} )。应该是:

    if (a.overalAvg > b.overalAvg) return -1;
    else if (a.overalAvg < b.overalAvg) return 1;
    else return 0;
  • 关于Javascript对对象数组进行排序未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34961945/

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