我正在尝试加入对象/关联数组的值,以便更改我的代码,但我无法弄清楚如何正确加入它们。这是我的代码:
$( 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;
答案 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(' ');
编辑:如果你想用jQuery,欢呼,接受的答案会更好。
答案 2 :(得分:0)
如果您可以加载linq.js,请尝试以下代码:
joinedClasses = Enumerable.From(classes).Select("$.Value").ToArray().join(' ');