jQuery加入对象值

时间:2014-04-02 14:22:50

标签: javascript jquery

我正在尝试加入对象/关联数组的值,以便更改我的代码,但我无法弄清楚如何正确加入它们。这是我的代码:

$( document ).on( "click", ".taskstatus a", function ( event ) {
    event.preventDefault();
    classes = {
        'OPEN': 'state_open',
        'COMPLETED': 'state_completed',
        'SKIPPED': 'state_skipped',
        'REJECTED': 'state_rejected'
    };
    joinedClasses = classes.map(function(value, key){ return key; }).join(' ');
    state = $(this).data('state');
    taskID = $(this).closest('.task').attr('id').replace( 'task_', '' );

    // Update checkbox icon
    $(this).closest('.taskwrap').find('.taskcheckbox').data( 'icon', $(this).data('icon') );

    // Update task class
    alert( joinedClasses );
    $(this).closest('.task').removeClass( joinedClasses ).addClass( classes[state] );

});

这个代码在map函数中断,因为它没有将它看作一个数组,是什么最好的方法来完成连接类的值,使它们看起来像这样:" state_open state_completed state_skipped state_rejected&# 34;

3 个答案:

答案 0 :(得分:15)

您可以使用jQuery.map功能。它更宽容,因此允许在关联数组(如你的)和传统数组上使用:

joinedClasses = $.map(classes, function(e){
    return e;
});

结果:

  

[" state_open"," state_completed"," state_skipped"," state_rejected"]

直播示例:http://jsfiddle.net/MK4f7/

然后可以使用与原始空格相同的方式连接它:

joinedClasses = $.map(classes, function(e){
    return e;
}).join(' ');

答案 1 :(得分:1)

因为它不是数组,所以你可以使用map。您需要使用如下所示的for循环:

var classes = {
    'OPEN': 'state_open',
    'COMPLETED': 'state_completed',
    'SKIPPED': 'state_skipped',
    'REJECTED': 'state_rejected'
};

// Create a tmp array for the join
var joined = [];

// Loop over the object Literal.
// the var key is now the prop in the object.
for (var key in classes) {
    var val = classes[key]; // gets the value by looking for the key in the object
    joined.push(val);
}

// Join the array with a space.
joined = joined.join(' ');

Working fiddle

编辑:如果你想用jQuery,欢呼,接受的答案会更好。

答案 2 :(得分:0)

如果您可以加载linq.js,请尝试以下代码:

joinedClasses = Enumerable.From(classes).Select("$.Value").ToArray().join(' ');