连接Javascript对象成员?

连接Javascript对象成员?,javascript,jquery,Javascript,Jquery,给定任何成员如下所示的对象: target { x1 : 1 x2 : 2 x3 : 3 y1 : 6 y2 : 5 y3 : 4 } target { x : [1, 2, 3] y : [6, 5, 4] } 我需要将对象转换为如下内容: target { x1 : 1 x2 : 2 x3 : 3 y1 : 6 y2 : 5 y3 : 4 } target { x :

给定任何成员如下所示的对象:

target
{
    x1 : 1
    x2 : 2
    x3 : 3
    y1 : 6
    y2 : 5
    y3 : 4
}
target
{
    x : [1, 2, 3]
    y : [6, 5, 4]
}
我需要将对象转换为如下内容:

target
{
    x1 : 1
    x2 : 2
    x3 : 3
    y1 : 6
    y2 : 5
    y3 : 4
}
target
{
    x : [1, 2, 3]
    y : [6, 5, 4]
}
从我知道的基本JavaScript来看,以下函数似乎可以工作:

function joinParameters(target, paramName) {
    var count = 1;
    var array = [];
    var name = paramName.concat(count);
    var value = target[name];
    while (typeof value != undefined) {
        array.push(value);
        name = paramName.concat(count);
    }
    target[paramName] = array;
}
所以,我可以说joinParameters(target,x);然而,问题是

    var value = target[name];
总是未定义的。我遵循FireBug中的代码,以确保目标对象具有我试图获取的属性,并且它确实具有。所以,我不太确定出了什么问题

如果jQuery有一种优雅的方法来实现这一点,那么我更喜欢这种解决方案。

您可以:

function joinParams(o) { 
    var ret = {},
        key;
    for(var i in o) {
        key = i.substr(0,1);
        ret[key] = ret[key] ? ret[key].push(o[i]) && ret[key] : [o[i]];
    } 
    return ret;
}


var target = /* original object */
target = joinParams(target);
使用下划线.js:

_(target).keys().reduce(function(memo, key){
    var split = /([^\d]+)([\d]+)/.exec(key);
    memo[split[1]] = memo[split[1]]||[];
    memo[split[1]][parseInt(split[2],10)-1] = target[key];
    return memo;
},{});
工作示例:


原始代码中存在一些逻辑错误(即无限循环)。修正:

函数joinParameters(目标、参数名){ var计数=1; var数组=[]; var name=paramName.concat(计数); var值=目标[名称]; 而(value!=undefined){/*typeof值将返回“undefined”*/ array.push(值); /*您需要递增“count”*/ name=paramName.concat(++count); 值=目标[名称]; } 目标[paramName]=数组; } ... 联合参数(目标,“x”); 注意:此函数调用将向
target
添加新元素
x
x1、x2、…、x6
仍将存在于
target
中。事实上,这个函数不处理
y
元素,我假设您也想“加入”它


对于一个更通用的函数,zachallia的答案应该可以做到这一点。

你的意思是使用
.join
而不是
.concat
.concat
将返回一个数组,
.join
将返回一个字符串。我想他实际上是想做一个substr。。因为paramName是stringname,所以String对象也有一个concat方法。当我单步执行代码时,它确实正确地连接了字符串。参考:w3schools有很多误导性和不正确的信息,最好不要将其用作参考。参考资料在这里:但有点难读。Mozilla通常都很好:啊,是的,我应该看到。。。我只是在FireBug中逐步浏览了代码的第一部分,并对失败的情况感到疑惑。谢谢谢谢,大卫。我感谢你的回答以及你有益的评论。答案被接受。