Javascript 对动态填充的对象数组进行排序
我有一个数组,它是这样初始化的Javascript 对动态填充的对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个数组,它是这样初始化的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, muta
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);
}
但是我不确定是否仍然支持.sort
?这似乎对我不起作用。generationObject是一个数组,而不是一个对象,所以评分(target_text,generationObject.string)代码>可能是问题所在,因为.string将未定义。(您的意思是生成对象[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)
})
}
var-generationObject=[]
对于(变量i=0;i
然后Array.prototype.sort就可以了。generationObject是一个数组,而不是一个对象,所以评分(target\u text,generationObject.string)代码>可能是问题所在,因为.string将未定义。(您的意思是生成对象[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)
})
}
var-generationObject=[]
对于(变量i=0;i
然后Array.prototype.sort就可以了。您应该在for
循环之外编写排序逻辑,因为如果将它放进去,对象数组将被排序N次,其中N
是循环的迭代。以下是两种方法-
通过使用函数-来澄清您的问题,sort()
仍然在几乎所有浏览器中受支持。如果您仍然担心浏览器的兼容性,可以检查以查看支持的浏览器列表
generationObject = generationObject.sort(function(a, b) {
return parseInt(a.score) - parseInt(b.score);
});
通过使用-
在下划线中,可以利用该函数
返回列表的一个(稳定的)排序副本,按照通过iteratee运行每个值的结果按升序排列。iteratee也可以是要排序的属性的字符串名称(例如,length)
您可以简单地在下划线中执行此操作-
generationObject = _.sortBy(generationObj, 'score');
您应该在for
循环外部编写排序逻辑,因为如果将其放入内部,对象数组将被排序N
次,其中N
是循环的迭代次数。以下是两种方法-
通过使用函数-来澄清您的问题,sort()
仍然在几乎所有浏览器中受支持。如果您仍然担心浏览器的兼容性,可以检查以查看支持的浏览器列表
generationObject = generationObject.sort(function(a, b) {
return parseInt(a.score) - parseInt(b.score);
});
通过使用-
在下划线中,可以利用该函数
返回列表的一个(稳定的)排序副本,按照通过iteratee运行每个值的结果按升序排列。iteratee也可以是要排序的属性的字符串名称(例如,length)
您可以简单地在下划线中执行此操作-
generationObject = _.sortBy(generationObj, 'score');
如果课程得到支持的话。显示相关代码并询问所有主要浏览器都支持的特定问题,而不是绕着问题转。@Thriggle您是对的,当我注意到您的评论时,我正在编辑我的评论。哎呀!把我的语言搞混了。谢谢您的更正。@FelixRosén,请看如何对一组对象进行排序。这有帮助吗?如果课程得到支持的话。显示相关代码并询问所有主要浏览器都支持的特定问题,而不是绕着问题转。@Thriggle您是对的,当我注意到您的评论时,我正在编辑我的评论。哎呀!把我的语言搞混了。谢谢您的更正。@FelixRosén,请看如何对一组对象进行排序。那有用吗?谢谢!尽管generationObject[i]
?不!您从一个空数组开始,然后使用附加到数组的.push
迭代地构建它。您希望generationObject[i]
成为{string:,score:}形式的对象
,但在填充数组之前它将是未定义的。谢谢!您不必这样做,尽管生成对象[i].push({..
?不!您从一个空数组开始,然后使用附加到数组的.push
迭代构建它。您希望生成对象[i]
成为{string:,score:}形式的对象
,但在填充数组之前,它将是未定义的。