在Javascript(编辑)

时间:2017-09-13 09:55:47

标签: javascript

在我的代码中,我创建了一个包含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和编程的初学者。你们有没有想过我能以更好的方式表达这个想法?

非常感谢您提前提供的所有帮助=)

3 个答案:

答案 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循环对象时,我们可以同时访问keyvalue。 在我们的例子中,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");
          } 
       } 
   }