对动态填充的对象数组进行排序
Sorting a dynamically filled array of objects
我有一个像这样初始化的数组var generationObject = [{string:"", score: 0}];
然后我动态填充:
for(var i = 0; i < amount_offspring; i++)
{
// "load" text into array and send the string to see if it evolves
generationObject[i].string = evolve(start_text, characters, mutation_rate);
// then score the string
generationObject[i].score = score(target_text, generationObject.string);
}
然后我想按分数对这个数组进行排序。我不知道什么是最好的,在for
循环中对其进行排序或之后对整个数组进行排序。
然后,我将获取得分最高的对象的字符串,并以递归方式再次通过函数传递它。
那么,实现此排序函数的好方法是什么呢?我在这里看到一些人使用它
generationObject.sort(function(a, b) {
return (a.score) - (b.score);
});
但我不确定是否仍然支持.sort
?不过,这似乎对我不起作用。
generationObject 是一个数组,而不是一个对象,所以score(target_text, generationObject.string);
可能是问题所在,因为 .string 将是未定义的。(你是说generationObject[i].string
?尝试像这样构建阵列:
var generationObject = []
for(var i = 0; i < amount_offspring; i++)
{
evolved_string = evolve(start_text, characters, mutation_rate)
generationObject.push({
string: evolved_string,
score: score(target_text, evolved_string)
})
}
然后Array.prototype.sort应该可以解决问题。
你应该在
for
循环之外编写排序逻辑,因为如果你把它放在里面,对象数组将被排序N
次,其中N
是循环的迭代。以下是两种方法-
通过使用sort()函数- 为了澄清您的问题,几乎所有浏览器仍然支持
sort()
。如果您仍然担心浏览器兼容性,您可以查看 MDN 文档以查看支持的浏览器列表。generationObject = generationObject.sort(function(a, b) { return parseInt(a.score) - parseInt(b.score); });
- 通过使用下划线-在下划线中,您可以利用 sortBy() 函数。
返回列表的(稳定)排序副本,按通过迭代运行每个值的结果按升序排列。 迭代也可以是要排序的属性的字符串名称(例如长度)。
你可以简单地在下划线js中做到这一点-
generationObject = _.sortBy(generationObj, 'score');
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 在数组的 2/3 上调用自身的排序算法
- 数组值的排序以匹配另一个数组ES6
- 按不同项目对对象数组进行排序
- 根据Javascript中的字符串值对数组的数组进行排序
- 在不同的javascript数组中对json响应进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 使用jquery根据数组对表行进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- Javascript按数字顺序排序()数组
- Javascript排序索引链接数组
- 在jquery中对时间数组进行排序
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- Javascript中的多维数组排序索引问题
- 如何在mongodb中根据数组内容的差异进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- 数组数据排序类似mysql查询
- 在小于O(n)时间内找到(排序)数组中的重复元素