在Knockout.js中反转数组

在Knockout.js中反转数组,knockout.js,Knockout.js,我正在学习如何使用Knockout.js。我想显示反向的observableArray内容,因此我以这种方式使用Knockout reverse函数: <ul data-bind="foreach: anObservableArray.reverse()" >...</ul> … 但是,它不起作用,也没有错误发生。当我尝试这个: <ul data-bind="foreach: anObservableArray.slice(0).reverse()"

我正在学习如何使用Knockout.js。我想显示反向的observableArray内容,因此我以这种方式使用Knockout reverse函数:

   <ul  data-bind="foreach: anObservableArray.reverse()" >...</ul>
但是,它不起作用,也没有错误发生。当我尝试这个:

<ul  data-bind="foreach: anObservableArray.slice(0).reverse()" >...</ul>

它按预期工作。我的问题是,当reverse函数已经返回一个反转的数组时,为什么我必须复制整个数组?

调用
reverse
实际上会在适当的位置反转数组(并返回它),因此您可能会遇到多次反转的问题

例如,如果有两个块,如:

<ul  data-bind="foreach: anObservableArray.reverse()" >...</ul>
<ul  data-bind="foreach: anObservableArray.reverse()" >...</ul>
第一个将被颠倒,第二个将回到原来的顺序

最好是反转副本,尤其是当您要从数组中添加和删除项时。

因为reverse()对源数组生效,而不是返回副本数组并使用“foreach”绑定将其敲除调用两次,这样您将在最终结果中得到相同的数组

您可以使用以下代码进行测试:

<ul  data-bind="foreach: alert(anObservableArray.reverse())" >...</ul>

我是通过搜索这个问题得到的;现在需要复制阵列的原因

“knockout.js 2.2中进行了更改,使数组变异函数不会对可观察数组创建依赖关系。通常,如果您希望计算结果返回数组的反转版本,则不会对原始数组使用反转,而是对副本使用反转。而不是
self.anObservableArray.reverse()
, 做
self.anObservableArray.slice(0.reverse()
示例:
http://jsfiddle.net/mbest/3QHM7/1/


因此,基本上,它是为了避免创建对可观察数组的依赖。

我使用两个元素启动了数组,并调用“foreach:observearray.reverse()“,有效地反转了数组,但是我尝试添加的元素没有出现在屏幕上,因此这意味着我不能添加元素然后反转数组,因为它假设先添加元素,然后绑定更新html,是吗?我尝试了,但无效,而且也试过上面的东西。。它仍然在提升中显示我order@RameshSangili-您正在执行
foreach:ActivityLogO.slice(0).reverse()
?我们不能为
foreach
获取一个按相反顺序显示的选项吗。当然,这是非常常见的,而且反转是浪费的(尽管我意识到时间上可能可以忽略不计),这是一种罕见的情况,在这种情况下,问题有我正在寻找的实际答案/代码,谢谢。