说我有一个对象数组
var result = [{
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121",
"Group": "Mango"
}, {
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121",
"Group": "Mango"
}]
我想得到最终结果:
var result ={
"Mango" : [
{
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121"
}, {
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121"
}
]
}
所以我做了这个
var obj = [];
for(var i = 0; i < result.length; i++ ){
if(obj[result[i].Group] && obj[result[i].Group].constructor === Array ){
}else{
obj[result[i].Group] = [];
// ################### PROBLEM ==========
var x = result[i];
delete x.Group;
console.log(result[i]);
// ################### ==================
obj[result[i].Group].push(result[i]); // error: result[i].Group is undefined
}
}
代码"delete x.Group"
应从var "Group"
中删除属性"x"
但实际上console.log(result[i]);
显示了
属性"Group"
已从中删除
result[i]
(原创)。怎么样?
看起来变量x
是对原始result[i]
的引用,这是不确定的。
如何从对象副本中删除属性会影响原始属性。如何克服这个问题?
答案 0 :(得分:1)
您只需使用hash
结构。也。使用delete
运算符删除一个对象&#39;属性。
var result = [{
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121",
"Group": "Mango"
}, {
"sss": "sssssss",
"yyy": "ssdsdsds",
"www": "1212121",
"Group": "Mango"
}]
var groupByField = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
delete x[key];
return rv;
}, {});
};
console.log(groupByField(result, 'Group'));
&#13;
然而,
如何从对象副本中删除属性如何影响 原来的?
您必须为该对象应用深层克隆。