1

我希望使用不同的 API 调用从各种来源获取内容,并将它们全部整理到具有相同格式的对象或数组中。我被javascript数组和对象困住了,我发现的例子似乎都没有做我想做的事。这是我要存储的格式。这是我想要实现的示例的伪编码

var content = new Object();
getTweets();
getSoundCloud();
display();


function getTweets() {

    //first result
    content.type = "tweet
    content.text = "the text of the tweet"
    content.image = "the image from the tweet"

    return content;
}

function getSoundCloud() {
    //second result
    content.type = "soundcloud
    content.text = "the name of the song"
    content.image = "the image of the song"

    return content;
}


function display() {
    //for each content
    {
        $("#container").append(content.text);
    }

}

第一个结果由一个函数调用生成,第二个结果由另一个函数调用生成。

我希望这些函数将所有内容一起添加到同一个格式对象中。填充对象后,我希望在不同的函数中对其进行迭代并显示在屏幕上。

我如何制作这个对象?我已经尝试过了,但数据总是相同的,即用相同的值覆盖。在php中,这可能是一个关联数组或类似的东西

我想为我拥有的每条内容都有一个对象,并且可以循环遍历它

content[0].type = "tweet"
content[1].type = "coundcloud"

任何带有示例的建议都会很棒。

非常感谢

4

4 回答 4

3

当你有很多东西时,你应该立即思考

我需要将这些东西存储在一个数组中。

当您的“事物”很复杂并且具有各种属性/状态时,您应该立即思考:

我需要创建一个对象来存储它们。

...所以这里最好的是一组对象。每个函数都会创建对象并将它们添加到content,我们将切换到一个数组:

var content = []; // Array
getTweets();
getSoundCloud();
display();


function getTweets() {
    var tweet = {}; // This is an object

    tweet.type = "tweet";
    tweet.text = "The text of the tweet";
    tweet.image = "The image of the tweet";

    content.push(tweet); // add the object to the array.
}

function getSoundCloud() {
    var soundcloudThing = {};

    soundcloudThing.type = "soundcloud"
    soundcloudThing.text = "the name of the song"
    soundcloudThing.image = "the image of the song"

    content.push(soundcloudThing);
}

现在,当涉及到显示这个内容时,就像一个数组一样;这里要做的显而易见的事情是迭代它;

function display() {
    for (var i=0;i<content.length;i++)
    {
        $("#container").append(content[i].text);

        // You can also use content[i].image and content[i].type in here
    }
}

请注意,[]and{}是用于创建数组和对象的文字符号。它的使用优于new Array()new Object()

于 2012-12-10T11:13:06.477 回答
0

其实就是这样想出来的

var content = {
    text: this.text.linkify().linkuser().linktag(),
    image: this.profile_image_url,
    type: 'tweet'
};

arrayContent.push(content);

我现在可以遍历它,每个内容并显示它!

于 2012-12-10T11:18:08.850 回答
0

content应该是一个对象数组,每个函数将其对象添加到内容数组中:

var content = []; // empty array
getTweets();
getSoundCloud();
display();


function getTweets() {
    content.push ({  //first result
      type: "tweet",
      text: "the text of the tweet",
      image: "the image from the tweet"
    });
}

function getSoundCloud() {
    content.push ({  //second result
      type: "soundcloud",
      text: "the name of the song",
      image: "the image of the song"
    });
}


function display() {
    content.forEach (v) {
       // code to format the object v appropriately
       var vtext = v.type + ' : ' + v.text;
        $("#container").append(vtext);
    }

}
于 2012-12-10T11:15:40.703 回答
0

我在这里做了一个例子:http: //jsfiddle.net/pdXsA/2/

var content = [];
content.push(getTweets());
content.push(getSoundCloud());
display();

function getTweets() {
    return{
        type : "tweet",
        text : "the text of the tweet",
        image : "the image from the tweet"                    
    };
}

function getSoundCloud() {
    return{
        type : "soundcloud",
        text : "the name of the song",
        image : "the image of the song"                    
    };
}

function display() {
    content.forEach(function(item){
        $("#container").append(item.text +"<br/>");
    });
}​
于 2012-12-10T11:14:33.683 回答