在我的代码中,我创建了一个包含2个子对象的对象,如下所示
var testObject = {
"page":{
"type": "ePurchase",
"title":"Purchase confirmation"
},
"user": {
"name": "Peter",
"lastname": "Smith"
}
};
我想要做的是,我在html页面上有一个输入字段,一旦我键入例如名称,程序将循环所有属性以查看是否有任何匹配记录并匹配。我的想法如下:
var input = document.getElementById('propertyName').value;
for (var i=0; i < Object.keys(testObject).length; i++ ) {
for (var j=0; j < Object.getOwnPropertyNames(testObject[i]).length; j++ ) {
if(testObject[i].getOwnPropertyNames[j] == input) {
console.log("The relevant input name ");
}
}
}
即如果我在输入中输入名字,我希望“Peter”返回。
然而,我收到错误“无法隐藏undefined或null to object” 我怎么能这样做才能使它有效?
另外..因为我也是javascripts和编程的初学者。你们有没有想过我能以更好的方式表达这个想法?
非常感谢您提前提供的所有帮助=)
答案 0 :(得分:0)
您似乎在错误的时间使用了错误的对象。
在这里查看console.logs:
var testObject = {
"page": {
"type": "ePurchase",
"title": "Purchase confirmation"
},
"user": {
"name": "Peter",
"lastname": "Smith"
}
};
var input = "Peter" // document.getElementById('propertyName').value;
var keys = Object.keys(testObject);
for (var i = 0; i < keys.length; i++) {
console.log(keys[i])
var test = Object.getOwnPropertyNames(testObject[keys[i]])
console.log(test)
for (var j = 0; j < test.length; j++) {
console.log(input,test[j],testObject[keys[i]][test[j]])
if (testObject[keys[i]][test[j]] == input) {
console.log("Matched record");
}
}
}
答案 1 :(得分:0)
for..in for ... in语句以原始插入顺序迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。
var testObject = {
"page": {
"type": "ePurchase",
"title": "Purchase confirmation"
},
"user": {
"name": "Peter",
"lastname": "Smith"
}
};
for (var outerObj in testObject) {
for (var innerObj in testObject[outerObj]) {
if (testObject[outerObj][innerObj] === "Smith") { // document.getElementById('propertyName').value;
console.log("Record matched");
}
}
}
首先尝试了解JavaScript object notation(JSON)
是什么? object
只是JSON
中的一个键值对,因此当我们使用for..in
循环对象时,我们可以同时访问key
和value
。
在我们的例子中,testObject
是一个JavaScript对象。如果我们使用&#39; for..in&#39;来迭代这个对象。在我们的情况下,它会向我们key
提供outerObj
,我们只需使用此key
来获取此密钥的值,这也是object
。这意味着我们仍然可以使用for..in
循环迭代结果对象,这个循环再次返回一个innerObj
的密钥,在这里我们可以检查哪些值对key
的{{1}}进行检索{1}}。
希望它有所帮助。
答案 2 :(得分:0)
试试这个
for (var i=0; i < Object.keys(testObject).length; i++ ) {
var testObj = Object.keys(testObject[Object.keys(testObject)[i]])
for (var j=0; j <testObj.length; j++ ) {
if(testObj[j]== input) {
console.log("Matched record");
}
}
}