1

我有一个包含从 ajax 查询返回的 JSON 数据的可观察数组:

    this.navList = ko.observableArray();

poplutated 它看起来像这样:

    "navList":[{"id":"50000"},{"id":"50001"},{"id":"50003"},{"id":"50006"},{"id":"50009"},{"id":"50011"},{"id":"50017"},{"id":"50018"},{"id":"50019"},{"id":"50020"},{"id":"50021"},{"id":"50022"},{"id":"50023"},{"id":"50024"},{"id":"50025"},{"id":"50026"},{"id":"50027"},{"id":"50028"},{"id":"50029"}]

我有一个从另一个代表当前记录的 ajax 调用填充的 observable:

    this.idNumber = ko.observable("");

它看起来像这样:

    "idNumber":50003

我正在尝试在数组中搜索此字符串,然后返回上一个索引:

    var indexofnav = vm.navList.indexOf(vm.idNumber());
    var previous = indexofnav - 1;
    alert(vm.navList()[previous].id());

目前我可以手动设置之前的数字 2 而不是 indexofnav -1 并获得 500003 的正确答案,但 indexOf 出现为 -1。我究竟做错了什么?

4

2 回答 2

1

你需要做这样的事情(小提琴:http: //jsfiddle.net/JLREk/2/):

var navList = ko.observableArray([{"id":"50000"},{"id":"50001"},{"id":"50003"},{"id":"50006"},{"id":"50009"},{"id":"50011"},{"id":"50017"},{"id":"50018"},{"id":"50019"},{"id":"50020"},{"id":"50021"},{"id":"50022"},{"id":"50023"},{"id":"50024"},{"id":"50025"},{"id":"50026"},{"id":"50027"},{"id":"50028"},{"id":"50029"}]);

var obs = ko.observable({"idNumber":"50003"});

var memberInArray = ko.utils.arrayFirst(navList(), function(element){
    return element.id == obs().idNumber;
})
var index = navList().indexOf(memberInArray);
var resultIndex = index - 1;

当您在数组中查找项目时,您需要通过比较 id 值来查找。this.idNumber 将是与数组中已经存在的任何对象完全不同的对象,因此 indexOf 将返回 -1。

于 2013-11-07T15:39:16.590 回答
0

你的“indexOf”不能工作。您的数组是一个对象数组而不是一个值数组,但是您只使用一个值进行 indexOf 调用。

更改 indexOf 以查找具有“Id”属性的对象,或将数组更改为值数组,例如“['50000', '50001', '50002', ... ]”

于 2013-11-07T15:40:47.910 回答