首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:如何通过变量设置对象键的数量和键值本身来创建数组对象?

jQuery:如何通过变量设置对象键的数量和键值本身来创建数组对象?
EN

Stack Overflow用户
提问于 2011-03-26 05:41:06
回答 2查看 756关注 0票数 0

我正在考虑这件事,希望你能帮上忙。

我的目标是创建一个arraysobject,其中每个key由一个variable设置,此keyvalues是另一个array的过滤结果。

好吧,这写起来很复杂,下面是一个例子:

代码语言:javascript
复制
<!-- Markup -->
<section id="container">
    <article class="class-1">1</article>
    <article class="class-2">2</article>
    <article class="class-3">3</article>
    <article class="class-4">4</article>
    <article class="class-5">5</article>
    <article class="class-6">6</article>
    <article class="class-7">7</article>
    <article class="class-8">8</article>
    <article class="class-9">9</article>
</section>

//  Desired outcome:
//  plugin variables are
    { columns:3 }

var cols = {
    1 : [ $('.class-1') , $('.class-4') , $('.class-7') ],
    2 : [ $('.class-2') , $('.class-5') , $('.class-8') ],
    3 : [ $('.class-3') , $('.class-6') , $('.class-9') ]
};

// my jQuery so far:
// note : columns == 3

var cols =  $.map( $('article','#container') , function(item, i) {
                return {[ i%columns+1 : item ]};
            });

我如何才能在这里实现我需要的东西?我做错了什么?

任何帮助都将不胜感激。

感谢您的阅读,

Jannis

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-26 06:07:26

我想我明白你想做什么了。您希望文章在加载时自动排序到列的映射中,对吗?

我不认为.map会把你带到那里,因为它会返回一个数组。在您想要的输出中,您有一个对象,每个列都有键。我认为你想要的是这样的东西:

代码语言:javascript
复制
var columns = 3;
var cols = {};

$(document).ready(function(){
    $('article','#container').each(function(index, value){
        var col = index%columns + 1;
        if(cols[col] === undefined){
            cols[col] = [$(value)];
        } else {
            cols[col].push($(value));
        }
    });
});
票数 1
EN

Stack Overflow用户

发布于 2011-03-26 05:57:30

如何使用about like this

代码语言:javascript
复制
var mapFunc = function(){ return $(this); },
    articles = $('#container article'),
    info = { columns: 3 },
    cols = {
        '1': articles.filter(':nth-child(3n + 1)').map(mapFunc).get(),
        '2': articles.filter(':nth-child(3n + 2)').map(mapFunc).get(),
        '3': articles.filter(':nth-child(3n + 3)').map(mapFunc).get()
    };

或者使用更动态的方法:

代码语言:javascript
复制
cols = {};    
for(var i = 1; i <= info.columns; i++)
    cols[i] = articles
        .filter(':nth-child(' + info.columns + 'n + ' + i + ')')
        .map(mapFunc).get()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5438415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档