Javascript 如何创建以变量作为名称的对象?

Javascript 如何创建以变量作为名称的对象?,javascript,arrays,Javascript,Arrays,这是我想要的,从这个数组: array1 = [{name: "a", value: 1, size: 2},{name: "a", value: 2, size: 3},{name: "b", value: 1 ,size: 4}]; 要创建这样的数组,请执行以下操作: array2 = [{ "a", {value: 1, size: 2},{value: 2, size: 3}},{ "b",{value: 1 ,size: 4}}] 基本上是创建一个数组,其中包含根据名称分组的对象。

这是我想要的,从这个数组:

array1 = [{name: "a", value: 1, size: 2},{name: "a", value: 2, size: 3},{name: "b", value: 1 ,size: 4}];
要创建这样的数组,请执行以下操作:

array2 = [{ "a", {value: 1, size: 2},{value: 2, size: 3}},{ "b",{value: 1 ,size: 4}}]
基本上是创建一个数组,其中包含根据名称分组的对象。 我试着用foreach循环和这样的函数来实现它:

var array1 = [{name: "a", value: 1, size: 2},{name: "a", value: 2, size: 3},{name: "b", value: 1 ,size: 4}];
var array2;
function make(element){
    array2['element[0]'] = [element[1], element[2]];
};
array1.forEach(make(this));
但我遇到一个错误:TypeError:无法设置未定义的属性“element[0]”。 我尝试使用Object.defineProperty方法,但无法实现它。 我怎样才能从array1到array2


**我在这个主题上搜索了类似的问题,但找不到问题的具体答案。

这里有一个相当简单的解决方案:

var array1=[{name:a,value:1,size:2},{name:a,value:2,size:3},{name:b,value:1,size:4}]; 函数收集器{ var值={}; 前庭功能{ if!values[el.name]{values[el.name]=[];} 值[el.name].push{value:el.value,size:el.size}; }; 返回Object.keysvalues.mapfunction键{ var o={}; o[key]=值[key]; 返回o; }; } var array2=collectarray1; console.logarray2;
document.writeJSON.stringifyarray2 其中一个问题是,您将makethis的返回值作为.forEach的回调传递,这是未定义的;此调用是正确的:

array1.forEach(make);
其次,您没有将array2正确初始化为对象

var array2 = {};
第三,每个元素都是一个对象而不是数组,因此您应该按名称引用字段。最后,如果您想按名称分组,那么您在每次迭代中所做的工作取决于您以前是否见过该名称:

function make(element)
{
    if (!array2[element.name]) {
      array2[element.name] = [];
    }
    array2[element.name].push({value: element.value, size: element.size});
};
var array1=[{name:a,value:1,size:2},{name:a,value:2,size:3},{name:b,value:1,size:4}]; var array2={}; 函数生成元素 { if!array2[element.name]{ array2[element.name]=[]; } array2[element.name].push{value:element.value,size:element.size}; }; a.外汇;
console.logarray2;您没有给array2一个值,因此您试图访问未定义的属性。另外,您可能是指array2[element[0]]和{a,{…}}不是有效的对象文字。但这些只是语法错误,无法解决根本问题。我不确定OP想要的是什么。我认为这是[{a:[{value:1,size:2},{value:2,size:3}]},{b:[{value:1,size:4}]}],但我可能错了。@RobG好的,修复了OP可能想要的内容。