Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Javasript中,有没有方法可以轻松地对这样的对象列表进行排序?_Javascript - Fatal编程技术网

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是如上所述的对象列表,我已经附加了所需的输出,谢谢。