在.each循环中拼接字符串

4

这可能是一个愚蠢的问题,但我似乎无法理解它或在任何地方找到它。

我有一个.each函数,它返回页面上一堆div的id,然后为它们分配一个编号。 我需要按特定格式将它们输出为一个字符串,以便我可以将它们传递给数据库并将它们用作“sort_order”值。(我通过数据库中的一个存储过程来拆分它们)。

以下是我的代码:

jQuery('#updateAllContentButton').click(function() {
    var count = 1;
 jQuery('.CommentaryItem').each(function() {
    var id = GetID(jQuery(this));
        var data_str = (id + ':' + count + '~');
        console.log(data_str);
        count++;
    });
});

这个函数会将每个data_str分别放在一行上,但我需要它像这样返回:

144:2~145:3~146:4~147:4~148:5(以此类推)

任何帮助都将不胜感激,谢谢!

4个回答

11

使用map和join:

jQuery('#updateAllContentButton').click(function() {
    console.log(jQuery('.CommentaryItem').map(function(i) {
        return GetID(jQuery(this)) + ':' + (i+1);
    }).get().join('~'));
});

请注意,您不必计算自己:大多数jQuery迭代函数都会为您完成此操作。


这个语法也可以在字符串连接(+)中调用。 - Szabolcs Páll

0
你可以使用数组来实现这个。像这样...
jQuery('#updateAllContentButton').click(function() {
    var count = 1;
    var arr = [];
 jQuery('.CommentaryItem').each(function() {
    var id = GetID(jQuery(this));
    var data_str = (id + ':' + count + '~');
    arr.push(data_str);
    //console.log(data_str);
    count++;
 });
 console.log(arr.join());
});

0

试试这个:

jQuery('#updateAllContentButton').click(function() {
var count = 1;
var data_str = "";
jQuery('.CommentaryItem').each(function() {
var id = GetID(jQuery(this));
    data_str += (id + ':' + count + '~');
    console.log(data_str);
    count++;
});

});


我是指在data_str上使用+=而不仅仅是= :) - Gintas K
发布后,我尝试了这种方法,但你必须在每个循环之前声明data_str,最终会在末尾添加一个额外的~。 - J215D
是的,我已经纠正了那个问题 :) 不过最好的解决方案仍然是dystroy发布的 :) - Gintas K

0

变更

var data_str = (id + ':' + count + '~');

data_str+ = (id + ':' + count + '~');

完整代码

jQuery('#updateAllContentButton').click(function() {
    var count = 1,
        data_str;

    jQuery('.CommentaryItem').each(function() {
        var id = GetID(jQuery(this));
        data_str += (id + ':' + count + '~');
        console.log(data_str);
        count++;
    });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接