加入Javascript对象成员?
考虑到任何物体与成员是这样的:加入Javascript对象成员?
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有这样做的优雅方式,那么我宁愿那个解决方案。
使用underscore.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;
},{});
工作例如:
谢谢,大卫。我很感谢你的回答以及你的有用评论。接受答案。 – Tedderz 2011-03-02 03:13:10
你可以这样做:
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);
function joinParams(target) {
var p;
for (prop in target) {
p = prop.substr(0, 1);
if (!target[p]) {
target[p] = [];
}
target[p].push(target[prop]);
}
return target;
}
target =
{
x1 : 1,
x2 : 2,
x3 : 3,
y1 : 6,
y2 : 5,
y3 : 4
}
target = joinParams(target);
是的,这比我的第一次尝试更清洁。 ha – zachallia 2011-03-02 02:05:55
,我们在您ORI一些逻辑错误代码(即无限循环)。修复:
function joinParameters(target, paramName) { var count = 1; var array = []; var name = paramName.concat(count); var value = target[name]; while (value != undefined) { /* typeof value will return "undefined". */ array.push(value); /* You need to increment 'count'. */ name = paramName.concat(++count); value = target[name]; } target[paramName] = array; } ... joinParameters(target, "x");
注意调用该函数将新元素添加到x
target
,x1, x2, ..., x6
仍然会存在target
。实际上,这个函数并不关心y
元素,我假设你也想“加入”元素。
对于更通用的功能,zachallia的答案应该有所斩断。
呃,是的,我应该已经看到了......我只通过FireBug中的代码的第一部分,并想知道失败的情况。谢谢! – Tedderz 2011-03-02 02:30:46
您的意思是使用'.join'而不是'.concat'? '.concat'将返回一个数组,'.join'将返回一个字符串。 – NT3RP 2011-03-02 01:42:37
我认为他的意思是实际上做一个substr ..因为paramName是一个字符串 – zachallia 2011-03-02 01:45:04
该String对象也有一个concat方法。当我单步执行代码时,它确实正确地连接了字符串。 ref:http://www.w3schools.com/jsref/jsref_concat_string.asp – Tedderz 2011-03-02 01:51:48