我得到了一个包含一些信息的对象
function node(id, title, content, isPrivate, dateOfCreation) {
this.id = id;
this.title = title;
this.content = content;
this.isPrivate = isPrivate;
this.dateOfCreation = dateOfCreation;
this.lastEdited = dateOfCreation;
}
我可以通过id
搜索这个对象// this.nodes -> my array of objects
this.getNodeById = function(nodeId){
return $.grep(this.nodes, function(e){ return e.id === nodeId; });
}
所以这似乎工作正常。测试时,我先调用一个方法"测试"
function test(){ // add a new object to the store at this.nodes
store.addNode(new node("abcde12345", "title one", "content one", false, getCurrentDate()));
}
并成功添加对象。之后我在初始化网站时调用了一个方法
function initEditor(nodeId){
test(); // call the testroutine
nodeId = "abcde12345"; // set the id
var n = store.getNodeById(nodeId); // search for this object in the store (datastore object)
var i = n.id;
var t = n.title;
var c = n.content;
var p = n.isPrivate;
var d = n.dateOfCreation;
var l = n.lastEdited;
debugger;
所以我的问题是,变量i,t,c,p,d,l为空。而且我不明白为什么因为变量" n"是正确的。 n存储对象,但我无法访问它的属性。
有关详细信息,请参阅我的数据存储区" class"
var store = new dataStore();
function dataStore() {
this.nodes = []; // the array of my objects
this.getNodes = function() { // get all the objects
return this.nodes;
}
this.addNode = function(entry) { // add a new object
this.nodes.push(entry);
}
this.deleteNode = function(entry) { // delete an object from the array
var index = this.nodes.indexOf(entry);
if (index > -1)
this.nodes.splice(index, 1);
}
this.getNodeById = function(nodeId){ // get an object by its id
return $.grep(this.nodes, function(e){ return e.id === nodeId; });
}
}
答案 0 :(得分:1)
变量的内容为undefined
,因为$.grep(array, function)
返回一个数组,其中包含满足过滤函数的所有元素。
如果id是唯一的,您可以更改.getNodeById()
以始终返回结果数组的第一个元素:
this.getNodeById = function(nodeId){
return $.grep(this.nodes, function(e){ return e.id === nodeId; })[0];
}
或者您可以使用Array.prototype.find()
代替$.grep()
:
this.getNodeById = function(nodeId){
return this.nodes.find(function(e){ return e.id === nodeId; });
}
在这两种情况下,如果没有具有给定id的节点,结果将为undefined
。