сопоставить переменную с элементом внутри массива объектов? - PullRequest
0 голосов
/ 09 февраля 2012

У меня есть Varable:

var name = "name";

это будет внутри массива объектов, которые у меня есть:

    var all = [];
    $.each(results, function(i, item){
        all.push({
            rank: i + 1,
            username: item.TopicName,
            mentions: item.LastHourCount,
            totalcount: item.TotalCount,
            urlLg: item.LargeImageUrl,
            urlSm: item.SmallImageUrl,
            shortname: item.ShortName
        });

    });

Мне нужно просмотреть массив объектов и найти «короткое имя», которое соответствует переменной «имя». объекты выглядят так:

Object[
  mentions: 21737
  rank: 2
  shortname: "name"
  totalcount: 59330
  urlLg: null
  urlSm: "http://i.cdn.turner.com/nba/nba/pulse/allstar/2012/img/images-small/howard.png"
  username: "lebron james"
],

как только я найду его, установите его в переменную: var showThis = all. [];

Внутри каждой функции, проходящей через файл json, возможно, где искать имя?

Ответы [ 3 ]

3 голосов
/ 09 февраля 2012

Я думаю, что я могу быть недоразумением.Если вы просто хотите найти запись в all с shortName соответствием name, то:

var match;
$.each(all, function() {
    if (this.shortName === name) {
        match = this;
        return false;
    }
});

, которая использует $.each для циклического перемещения по массивуВ обратном вызове итератора this будет ссылаться на элемент массива, поэтому мы просто проверяем this.shortName === name.return false останавливает цикл each.Если совпадений нет, match сохранит значение по умолчанию (undefined).

Или как традиционный цикл for:

var match, index, entry;
for (index = 0; index < all.length; ++index) {
    entry = all[index];
    if (entry.shortName === name) {
        match = entry;
        break;
    }
});
0 голосов
/ 09 февраля 2012

Underscore.js решение:

var showThis = _.find( all, function ( elem ) {
    return elem.shortname === name;
});

Простое решение JavaScript:

var showThis = all.filter( function ( elem ) {
  return elem.shortname === name;
})[ 0 ];

Кстати, .filter() - это метод итерации массива ES5. Методы итерации массива ES5 не реализованы в IE8 и более ранних версиях. (Вы можете легко заполнить их, хотя.)

0 голосов
/ 09 февраля 2012
var t={};

$.each(all, function(i, item){

  if (item['shortname']=="name") {
    t=this;
    return false;
  }

});
...