Javascript 为什么排序给我随机排序(剔除可观察数组)

Javascript 为什么排序给我随机排序(剔除可观察数组),javascript,arrays,sorting,knockout.js,Javascript,Arrays,Sorting,Knockout.js,我有一个包含数字的可观察数组。我想按价格按钮分类。这是我的viewmodel: var ViewModel = function(model) { self.Numbers = ko.observableArray(model); self.SortArray = function() { InstanceViewModel.Numbers.sort(function (left, right) { ret

我有一个包含数字的可观察数组。我想按价格按钮分类。这是我的viewmodel:

var ViewModel = function(model) {
        self.Numbers = ko.observableArray(model);
        self.SortArray = function() {

            InstanceViewModel.Numbers.sort(function (left, right) {
                return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
        }
    }

    var InstanceViewModel = new ViewModel([{"id":"1"},{"id":"2"},{"id":"3"},{"id":"4"}]);

    ko.applyBindings(InstanceViewModel);
var ViewModel=函数(模型){
self.number=ko.observearray(模型);
self.SortArray=函数(){
InstanceViewModel.Number.sort(函数(左、右){
返回left.id==right.id?0:(left.id
这是我的html:

<input type="button" value="Sort" data-bind="click: SortArrayNum">
    <div data-bind="foreach: Numbers">
        <h1 data-bind="text: id"></h1>
    </div>

分类不当怎么可能?它还说:“UncaughtTypeError:无法读取未定义的“sort”属性”。我一段时间前就开始工作了,感觉很奇怪。我做错了什么,伙计们?

通过正确的阅读方式

myObservableArray.sort(function (left, right) { return left.lastName == right.lastName ? 0 : (left.lastName < right.lastName ? -1 : 1) })
myObservableArray.sort(函数(左、右){return left.lastName==right.lastName?0:(left.lastName
因此,这不应该吗

self.SortArray = function () { 
   return self.Numbers.sort(function (left, right) { return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) }) 
}
self.SortArray=function(){
返回self.Numbers.sort(函数(左,右){return left.id==right.id?0:(left.id
而不是

self.SortArray = function() {

            InstanceViewModel.Numbers.sort(function (left, right) {
                return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
        }
self.SortArray=function(){
InstanceViewModel.Number.sort(函数(左、右){
返回left.id==right.id?0:(left.id

var ViewModel=函数(模型){
self.number=ko.observearray(模型);
self.SortArray=函数(){
self.number.sort(函数(左、右){
返回left.id==right.id?0:(left.id


您会遇到异常,因为您的函数名为SortArray而不是SortArrayNum

似乎很挑剔,但实际上很重要:您没有数字数组。您有一个对象数组,其属性“id”包含一个字符串(碰巧包含一个数值)。
<input type="button" value="Sort" data-bind="click: SortArray">

    <div data-bind="foreach: Numbers">
        <h1 data-bind="text: id"></h1>
    </div>


var ViewModel = function(model) {
        self.Numbers = ko.observableArray(model);
        self.SortArray = function() {

          self.Numbers.sort(function (left, right) {
                return left.id == right.id ? 0 : (left.id < right.id ? -1 : 1) })
        }
    }

    var InstanceViewModel = new ViewModel([{"id":"2"},{"id":"1"},{"id":"6"},{"id":"4"}]);

    ko.applyBindings(InstanceViewModel);