0

此代码有效,但随着我的 var 列表的增长,很快就会变得低效(已经如此?)。

我正在使用他们的新 API 将 Twitter 流添加到页面。这意味着我需要手动向他们提供一些信息,然后他们会返回一个 ID 字符串。没关系,没有解决方法。

此示例仅使用三个流所需的信息,但列表将迅速增长到数十个甚至更多。

function isValidTweets(ts_titletweets) {
    var widgetid = $('#TweetStuff').attr('data-widget-id');

    var jackID = '243441836335697920'; //IDs associated with streams
    var jillID = '243398621595312128';
    var harryID = '243398621595312130';


    var ts_titletweets = title.toLowerCase(); //title is parsed from URL elsewhere
    validtweets = "jack|jill|harry"; // if the title doesn't match then no streams should be used
    if (validtweets.indexOf(ts_titletweets.toLowerCase() + "|") > -1) {

        console.log('TweetsEnabled');

        if (ts_titletweets == "jack")
        {widgetid = jackID;
        console.log(widgetid + title)}
        else if (ts_titletweets == "jill")
        {widgetid = jillID;
        console.log(widgetid + title)}
        else if (ts_titletweets == "harry")
        {widgetid = harryID;
        console.log(widgetid + title)};


        $('#TweetStuff').html("<a class=\"twitter-timeline\" width=\"500\" height=\"600\" data-widget-id=" + widgetid + "></a>");

        $("#newTweetsButton").delay(3000).show(0);
        $("#filters").css({'margin' : '-30px 0px 0px 0px'});
        return true;

    } console.log('no Tweets'); 
    return false;

}

我确定我正在手动重新输入,并且希望随着列表的增长而避免这种情况。

非常感谢任何和所有的建议,感谢新手。

谢谢!

更新错别字

4

4 回答 4

1

我不确定我是否理解代码中发生的事情,但您可以使用的是查找表。

    var ids = {
        'jack': '243441836335697920',
        'jill': '243398621595312128',
        'harry': '243398621595312130'
    };


    if (/*whatever*/) {

        widgetid = ids[ts_titletweets];
        console.log(widgetid + title);
    }
于 2012-09-28T01:23:29.757 回答
1

不太确定你在问什么,但这里有一些可能会有所帮助的东西:

// define an object with name: id pairs
var twitterIds = {
  'jack': '243441836335697920',
  'jill': '243398621595312128',
  'harry': '243398621595312130'
};

foreach(var name in twitterIds) {
  // name = jack
  // twitterIds[name] = '243441836335697920'
}

function loadTweets ( name ) {
  if( name && twitterIds[name] ) {
    // load stream here.  Use twitterIds[name] to get the twitter id
  }
}
于 2012-09-28T01:24:09.650 回答
1

我将创建一个具有与人名相对应的属性的对象。然后,您将 id 存储起来。接下来,您可以检查它是否存在并执行您的代码。

http://jsfiddle.net/7PSNt/1/

var title = 'jill'; //hard coded for demo purposes
var myObject = {
    'jack': 1,
    'jill': 2,
    'harry': 3
};

//I assume title is just one of the keys above (jack, jill, harry)                 
var ts_titletweets = title.toLowerCase();

//if the object contains a property for the title then we can proceed
var tweetID = myObject[ts_titletweets];
if (tweetID != undefined) {
    widgetid = tweetID;
    console.log(widgetid + ':' + title)
}
​
于 2012-09-28T01:25:06.640 回答
1

为了提高效率,试试这个:

//cache of static jQuery objects
var $$ = { 
    'TweetStuff': $('#TweetStuff'),
    'newTweetsButton': $("#newTweetsButton"),
    'filters': $("#filters")
};

//define the ids in an outer scope - this gives isValidTweets less work to do each time it is called
var ids = {
    jack: '243441836335697920',
    jill: '243398621595312128',
    harry: '243398621595312130'
};

function isValidTweets(title) {
    var t = title.toLowerCase();
    var widgetid = ids[t] || $$.TweetStuff.attr('data-widget-id');
    $$.TweetStuff.html("<a class=\"twitter-timeline\" width=\"500\" height=\"600\" data-widget-id=" + widgetid + "></a>");
    $$.newTweetsButton.delay(3000).show(0);
    $$.filters.css({'margin' : '-30px 0px 0px 0px'});
    console.log('Tweets: ' + (ids[t] ? (widgetid + ' - ' + title) : 'none')); 
    return !!ids[t];//true or false
}
于 2012-09-28T01:52:59.693 回答