我正在尝试从以下对象获取值。 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'));
这适用于第一个对象,而不适用于第二个对象。我怎样才能让它在第二个工作?
答案 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)
修改强>
如果我只输入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');