Я пытаюсь получить значения из следующего объекта. Цикл 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"
}
}
Я хочу выполнить поиск элементов, имя атрибута которых совпадает с некоторым параметром 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 ответа
Первая переменная - это массив объектов. Поскольку это массив, вы можете использовать все методы массива.
Второй - это объект с ключами 4dd5a49e366
и 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)
ИЗМЕНИТЬ
если я введу, просто найдитеByName ('b'); он должен вернуть результаты, которые полное имя
Вам нужно использовать 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');
Я предлагаю вам немного почитать об объектных литералах JavaScript и массивах. Первый пример - массив объектов. Второй просто объект. Две совершенно разные структуры данных.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.