我有一个包含从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。我做错了什么?
答案 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>