如何创建名称为变量的对象
How to create an object with a variable as it's name?
这是我想要的,来自这个数组:
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));
但是我得到一个错误:"类型错误:无法设置未定义的属性'element[0]'"。我尝试使用Object.defineProperty方法,但无法实现它。如何从阵列 1 到阵列 2
?**我搜索了有关此主题的类似问题,但找不到我的问题的具体答案。
其中一个问题是您将 make(this)
的返回值作为 .forEach()
的回调传递,这是undefined
; 这个调用是正确的:
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 = {};
function make(element)
{
if (!array2[element.name]) {
array2[element.name] = [];
}
array2[element.name].push({value: element.value, size: element.size});
};
array1.forEach(make);
console.log(array2);
这是一个相当简单的解决方案:
var array1 = [{name: "a", value: 1, size: 2}, {name: "a", value: 2, size: 3}, {name: "b", value: 1 ,size: 4}];
function collect(arr) {
var values = {};
arr.forEach(function (el) {
if (!values[el.name]) { values[el.name] = []; }
values[el.name].push({ value: el.value, size: el.size });
});
return Object.keys(values).map(function (key) {
var o = {};
o[key] = values[key];
return o;
});
}
var array2 = collect(array1);
console.log(array2);
document.write(JSON.stringify(array2));
相关文章:
- 替换另一个变量对象中的变量值
- 如何从表单变量对象中获取特定的from属性
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- 如何将变量对象传递到多个javascript弹出窗体
- 如何将javascript变量/对象从一个页面传递到另一个页面
- 在具有递增的变量/对象中存储和控制传单 GeoJSON 图层
- 在回调中重用变量/对象
- 给一个有1个变量/对象的函数给定几个参数
- 使用单词'英语'因为变量/对象名称在javascript中不起作用
- 如何访问变量对象中的数据
- 使用onclick调用变量对象中的函数
- 使用Underscore JS部分和for循环的未定义变量对象
- 如何查看我的变量对象
- 变量对象属性名称作为javascript中的参数
- 从变量对象中移除DOM元素,以便将其发布到服务器
- 根据变量对象是否等于“true”输出内容
- 如何连接(变量+对象键名)以获得点表示法的对象值
- 为什么在ES5中将变量对象改为词法环境
- 动态引用变量(对象)