这两个javascript对象之间的区别是什么

时间:2016-09-04 04:01:25

标签: javascript

我正在尝试从以下对象获取值。 for循环在其中一个对象中起作用,但在另一个javascript对象中不会出现。我想知道有什么区别,我怎么能让它在另一个对象中工作?

对象1:

var objects = [
  {
    "foo" : "bar",
    "bar" : "sit"
  },
  {
    "foo" : "lorem",
    "bar" : "ipsum"
  }
];

对象2:

{
"4dd5a49e366": {
"name" : "bar",
"bar" : "sit",
"date": "2016-08-03T04:48:04.283Z"
},
"519c5056af2": {
"name" : "lorem",
"bar" : "ipsum",
"date": "2016-09-03T04:48:04.283Z"
}
}

我想搜索name属性与某些search_term匹配的项目。并退回物品。

以下是使用的循环搜索。

function searchFor(toSearch) {
      var results = [];
      toSearch = trimString(toSearch); // trim it
      for(var i=0; i<objects.length; i++) {
        for(var i in objects[i]) {
          if(objects[i][key].indexOf(toSearch)!=-1) {
            if(!itemExists(results, objects[i])) results.push(objects[i]);
          }
        }
      }
      return results;
    }
   console.log(searchFor('o'));

这适用于第一个对象,而不适用于第二个对象。我怎样才能让它在第二个工作?

2 个答案:

答案 0 :(得分:1)

我建议你阅读JavaScript Object literals和Arrays。第一个例子是一个对象数组。第二个只是一个对象。两种完全不同的数据结构。

答案 1 :(得分:1)

第一个变量是一个对象数组。由于它是一个数组,你可以使用它上面的所有数组方法。

第二个是带有键4dd5a49e366&amp;的对象。 519c5056af2反过来又是对象并且具有很少的属性。

您不能在第二个对象上使用数组方法

  

我怎样才能让它在另一个对象中工作?

希望此代码段有用

var myObject = {
  "4dd5a49e366": {
    "name": "bar",
    "bar": "sit",
    "date": "2016-08-03T04:48:04.283Z"
  },
  "519c5056af2": {
    "name": "lorem",
    "bar": "ipsum",
    "date": "2016-09-03T04:48:04.283Z"
  }
}
// a function to accept the name value
function findByName(name) {
  var thisObject = "";
  for (var keys in myObject) { // looping over objects
    var getThisObject = myObject[keys];
    if (getThisObject.name === name) { // Checking if name matches
      thisObject = myObject[keys]; // assigning the object to a variable
    }
  }
  return thisObject // return that variable
}
var getMyObject = findByName('bar');
console.log(getMyObject)

JSFIDDLE

修改

  

如果我只输入findByName(&#39; b&#39;);它应该返回结果   全名

您需要使用indexOf来查找此名称值是否包含特定字符。

使用数组存储名称值包含此特定字符的所有相关对象。从函数中返回该数组。

function findByName(name) {
  var thisObject = [];
  for (var keys in myObject) {
    var getThisObject = myObject[keys];
    if (getThisObject.name.indexOf(name)!==-1) {
      thisObject.push(myObject[keys]);
    }
  }
  return thisObject
}
var getMyObject = findByName('b');

JSFIDDLE 2