匹配关联数组中数组内的位置

时间:2011-10-15 00:24:41

标签: javascript

我想知道是否有可能获得一个元素的位置,该元素位于另一个数组内的关联数组中。例如,如果我将值“test1”存储在变量中,则可以获取test1的索引,然后将其与url键中的值进行匹配,并拉出位于相同位置的值(在本例中为www。 test.com/test1.html?提前谢谢。

编辑:我认为发布更多代码可能有所帮助。我到目前为止,我甚至无法正确解释它。我试图自己一起破解一些东西,但它并不是很有效。重要的部分是“更新链接”部分。那么让我们说randomlink_i = test1并且它是一个字符串。当我尝试将randomlink_i传递给indexOf函数时,我得到一个-1,用于刚刚低于它的警报。但是,如果我直接传入'test1'而不是变量,那么我得到0这是正确的位置。我离开基地了吗?

var _SERIAL = new Array(
        { done: false, initialized: false, market: '', submarket: '' },
        { done: false, value: '', type: '' },
        { done: [false, false], value: '', initialized: [false, false], visited: [false, false], darkbackground: [false,false] },
        { done: false, value: '' }
);

var _MARKETS = new Array('', 
{
    title: 'first set',
    url: new Array('http://www.test.com/1.html','http://www.test.com/2.html','http: //www.test.com/3.html','http://www.test.com/4.html'),
    anchortext: new Array('test1','test2','test3','test4'),
    label: 'Register Now!'
},
{
    title: 'second set',
    url: new Array('http://www.test2.com/1.html','http://www.test2.com/2.html','http://www.test2.com/3.html','http://www.test2.com/4.html'),
    anchortext: new Array('test12','test22','test32','test42'),
    label: 'Register Now!'
}

function initMarket() {
_DEBUG ? debugWrite('initMarket()') : '';
var randomlink_i;

// if there are sub markets
_OPEN_RADIOS[_SERIAL[0].market] ? randomlink_i = randomPop(_MARKETS[_SERIAL[0].market].anchortext[_SERIAL[0].submarket].anchortext) : randomlink_i = randomPop(_MARKETS[_SERIAL[0].market].anchortext);

// update the link on step 3
var marketlinks = $$('#btn_foot a');
marketlinks[0].innerHTML = randomlink_i;
alert(randomlink_i);
alert(typeof(randomlink_i));
var marketlinkposition = _MARKETS[_SERIAL[0].market].anchortext.indexOf(randomlink_i);
alert(marketlinkposition);
marketlinks[0].href = _MARKETS[_SERIAL[0].market].url[marketlinkposition];
alert(_MARKETS[_SERIAL[0].market].url[marketlinkposition]);

// removal of "_counted" attribute
for (var i=0; i<marketlinks.length; i++) {
    marketlinks[i]._counted = undefined;
    marketlinks[i].removeAttribute('_counted');
}

}

1 个答案:

答案 0 :(得分:0)

我不完全确定你在问什么,但在所有现代浏览器和IE9 +中都有indexOf method。 (如果你需要支持IE8-,那个页面也有一些你可以使用的代码。)

所以你可以搜索每个对象中的每个anchortext数组,就像这样(我认为这就是你想要的,但如果我误解,请告诉我):

function getSomeItem(value) {
    var i = _MARKETS.length,
        current;
    while (i) {
        i -= 1;
        current = _MARKETS[i].anchortext.indexOf(value);
        if (current + 1) {
            return _MARKETS[i].url[current];
        }
    }
}

所以你会像上面那样使用上面的函数:

getSomeItem('test1'); // returns 'http://www.test.com/1.html'