将变量与对象数组中的元素匹配?

时间:2012-02-09 14:34:39

标签: jquery arrays json loops

我有一个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
        });

    });

我需要查看对象数组并找到与变量“name”匹配的“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 个答案:

答案 0 :(得分:3)

我想我可能会误解。如果您只想在all中找到shortName匹配name的条目,那么:

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

使用$.each循环遍历数组。在迭代器回调中,this将引用数组元素,因此我们只需检查this.shortName === namereturn 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;
    }
});

答案 1 :(得分:0)

var t={};

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

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

});

答案 2 :(得分:0)

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和旧版本中实现。 (你可以轻松地将它们填充。)