搜索json字符串并返回可观察数组中的上一个索引

时间:2013-11-07 15:25:47

标签: knockout.js

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

    this.navList = ko.observableArray();

弹出它看起来像这样:

    "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"}]

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

    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。我做错了什么?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您的“indexOf”无效。 您的数组是对象的数组,而不是值数组,但您只使用值进行indexOf调用。

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