如何从数组中提取某些元素?

时间:2014-10-02 00:12:36

标签: javascript arrays

以下代码访问并使用其中的对象进行数组。每个对象都有和id,url和Tag。我希望能够基本上使用Tag来显示与我建议的标签相关的随机URL。

例如,我希望window.currentlyShownOffer.Tag始终等于Garden。花园是一个标签。

function receivedData(data) {

        function changeOfferPicture() {
            if (window.currentlyShownOffer) {
                var tagArray = data[window.currentlyShownOffer.Tag];
                tagArray.splice(tagArray.indexOf(currentlyShownOffer), 1);
                //alert(window.currentlyShownOffer.ImagesId);

            }


            var tags = Object.keys(data);
            var randomTag = tags[Math.floor(Math.random() * tags.length)];
            var tagArray = data[randomTag];


            window.currentlyShownOffer = tagArray[Math.floor(Math.random() * tagArray.length)];
            document.getElementById('content').src = window.currentlyShownOffer.ImagesPath;
        };
}

了解数组的外观:

{“Garden”:[{“ImagesId”:”63”,”ImagesPath”:”http….”,”Tag”:”Garden”},{“Garden”:[{“ImagesId”:”64”,”ImagesPath”:”http….”,”Tag”:”Garden”}]{“Food”:[{“ImagesId”:”63”,”ImagesPath”:”http….”,”Tag”:”Food”},{“Food”:[{“ImagesId”:”63”,”ImagesPath”:”http….”,”Tag”:”Food”}]

更新

function receivedData(data) {

        function changeOfferPicture() {
            if (window.currentlyShownOffer) {
                var tagArray = data[window.currentlyShownOffer.Tag];
                tagArray.splice(tagArray.indexOf(currentlyShownOffer), 1);
                //alert(window.currentlyShownOffer.ImagesId);

            }


            var tags = Object.keys(data);
            var randomTag = tags[Math.floor(Math.random() * tags.length)];
            var tagArray = data[randomTag];

         function getObjectsWithTag(tag, tagArray){
                return tagArray.filter(function(item){
                return item.tag === tag;
            });
            }

            getObjectsWithTag(Garden);


            window.currentlyShownOffer = tagArray[Math.floor(Math.random() * tagArray.length)];
            document.getElementById('content').src = window.currentlyShownOffer.ImagesPath;
        };
}

这可能是对阵列更好的想法:

{
“Garden’ : [{‘ImagesId”: ”38”, ”ImagesPath”: ”url”, ”Tag”: ”Food”}],
“Sport’: [{‘ImagesId”: ”64”, ”ImagesPath”: ”url”, ”Tag”: ”Sport”}]
}

1 个答案:

答案 0 :(得分:1)

您可以使用Array.filter()获取具有特定tag的所有项目。如果tagArray的对象的密钥tag包含标记名称:

function getObjectsWithTag(tag, tagArray){
  return tagArray.filter(function(item){
    return item.tag === tag;
  });
}

返回的值将是一个数组,其中只包含与原始tagArray中的标记名称匹配的项目。