Javascript 在Javasript中,有没有方法可以轻松地对这样的对象列表进行排序?
我有一个节点类Javascript 在Javasript中,有没有方法可以轻松地对这样的对象列表进行排序?,javascript,Javascript,我有一个节点类 class Node: def __init__(self, move = None, parent = None, state = None): self.move = move self.parentNode = parent # "None" for the root node self.childNodes = [] self.wins = 0 self.visits = 0 self.untried
class Node:
def __init__(self, move = None, parent = None, state = None):
self.move = move
self.parentNode = parent # "None" for the root node
self.childNodes = []
self.wins = 0
self.visits = 0
self.untriedMoves = state.GetMoves() # future child nodes
self.playerJustMoved = state.playerJustMoved # the only part of the state that the Node needs later
def UCTSelectChild(self):
""" Use the UCB1 formula to select a child node. Often a constant UCTK is applied so we have
lambda c: c.wins/c.visits + UCTK * sqrt(2*log(self.visits)/c.visits to vary the amount of
exploration versus exploitation.
"""
s = sorted(self.childNodes, key = lambda c: c.wins/c.visits + sqrt(2*log(self.visits)/c.visits))
return s
我有这些节点对象的列表
在Python中,我可以很容易地进行排序
s = sorted(self.childNodes, key = lambda c: c.wins/c.visits + sqrt(2*log(self.visits)/c.visits))
用Javascript实现这一点的最佳方法是什么?这是我使用Javascript的第一天。您可以使用数组的方法
array = [...];
array = array.sort();
这将根据默认比较逻辑对数组进行排序。如果要提供自己的比较逻辑,只需将比较函数作为参数传递即可。与Python的key
不同,compare函数只使用一个参数,它提供firstElement
和secondElement
作为参数。所以,你可以这样做:
array = array.sort((firstEl, secondEl) => {
let first = firstEl.wins / firstEl.visits + sqrt(2 * Math.log(firstEl.visits)/firstEl.visits);
let second = secondEl.wins / secondEl.visits + sqrt(2 * Math.log(secondEl.visits)/secondEl.visits);
return first - second;
});
当然,这看起来有点冗长,但事实就是这样。您可以发布节点类和数据示例吗?您还应该附加什么是输入,什么是输出。@SajeebAhamed input是如上所述的对象列表,我已经附加了所需的输出,谢谢。