0

我有两个字符串数组:hrefs, thumbs. 需要将此数组组合成另一个具有如下结构的数组。怎么做 ?为清楚起见 - 我需要使用Lightview API来调用函数Lightview.show(elements),其中元素是我需要构建的结果数组。

HTML:

<a href="/one" class="lv" thumbnail="one.jpg">one</a>
<a href="/two" class="lv" thumbnail="two.jpg">two</a>
<a href="/three" class="lv" thumbnail="three.jpg">three</a>

数组:

var hrefs = $('.lv').map(function() { return $(this).attr('href'); }).get();
var thumbs = $('.lv').map(function() { return $(this).attr('thumbnail'); }).get();

所需的结果数组(元素):

{
    {hrefs[0], 
        {
           thumbnail: thumbs[0]   
        }
    },
    {hrefs[1],
        {
           thumbnail: thumbs[1]   
        }
    },
    ...
}

我已经开始了,但我认为这是错误的......

var e = new Array();
$.each(hrefs, function(i, value) {
    e[i] = new Array();
    e[i][0] = value;
    e[i][1] = {thumbnail: thumbs[i]};
});
4

4 回答 4

2

你是这个意思吗?

var result = $('.lv').map(function() {
    var o = {};
    o[$(this).attr('href')] = { thumbnail: $(this).attr('thumbnail') } };
    return o;
}).get();
于 2013-01-25T07:13:49.807 回答
2

你在寻找这样的东西吗?

var hrefs = $('.lv').map(function() { return $(this).attr('href'); }).get();
var thumbs = $('.lv').map(function() { return $(this).attr('thumbnail'); }).get();

var arr = {};
for (i in hrefs) {
    arr[hrefs[i]] = {
        thumbnail: thumbs[i]
    }
}

另一个建议,尽量少使用 JQuery 以加快执行速度

var lvs = $('.lv');
var arr = {};
for (i=0; i< lvs.length; i++) {
    arr[lvs[i].getAttribute('href')] = {
        thumbnail: lvs[i].getAttribute('thumbnail')
    }
}
于 2013-01-25T07:17:13.083 回答
1

您快到了。做就是了:

var e = [];
$.each(hrefs, function(i, value) {
    e[i] = [];
    e[i] = [ value, {thumbnail: thumbs[i]} ];
});

甚至更短:

var e = [];
$.each(hrefs, function(i, value) {
    e[i] = [ value, {thumbnail: thumbs[i]} ];
});
于 2013-01-25T07:16:22.657 回答
0

试试这个

var result = {};

$.each( hrefs, function ( index ) {
    result[ hrefs[ index ] ] = { thumbnail: thumbs[ index ] };
});
于 2013-01-25T07:14:02.803 回答