通过迭代数组将方法分配给对象
Assign methods to object by iterating over an array
在ES5中,我知道可以使用forEach
循环通过以下方式将方法分配给对象:
var myMethods = [
{
name: 'start',
src: someFn
},
{
name: 'stop',
src: someOtherFn
}
];
var myObject = {};
myMethods.forEach(function(method) {
myObject[method.name] = method.src;
});
在 ES2015(或 ES6)中,是否可以在创建对象的同时定义这些方法?以下是我如何期望它工作的示例:
// example
const myObject = {
[...myMethods.map((method) => method.name)]: [...myMethods.map(method) => method.src)]
}
最终结果如下所示:
const myObject = {
start: someFn,
stop: someOtherFn
}
如果有一种方法可以迭代这些方法并将它们分配给myObject
,我很乐意重组myMethods
数组,以便这样做。
最终目标是能够在外部模块中分配这些方法中的每一个,而不必重复定义。
是的,您可以将 Object.assign
和 spread 运算符与计算的属性名称结合使用来执行
var myObject = Object.assign({}, ...myMethods.map(({name, src}) => ({[name]: src})));
首先,我们将myMethods
映射到一个小的单属性对象的数组,其键由name
属性的值和src
属性的值给出。然后我们使用 spread 运算符 ...
将这些作为参数传递给Object.assign
。 然后Object.assign
为我们将它们粘在一起。
Reduce应该可以为您解决问题。请注意,可选的第二个参数用于在开头以空对象开头。
var myMethods = [{
name: 'start',
src: function() {
console.log('started')
}
}, {
name: 'stop',
src: function() {
console.log('stopped')
}
}];
var myObject = myMethods.reduce((obj, method) => {
obj[method.name] = method.src;
return obj;
}, {})
console.log(myObject)
myObject.start()
myObject.stop()
尝试将同一行myMethods
分配nemts 分配给myObject
var myObject = {};
someFn = function(){console.log(this)};
someOtherFn = function(){console.log(this)};
var myObject = {};
someFn = function(){};
someOtherFn = function(){}
var myMethods = [
{
name: (myObject["start"] = "start"),
src: (myObject["start"] = someFn)
},
{
name: (myObject["stop"] = "stop"),
src: (myObject["stop"] = someOtherFn)
}
];
相关文章:
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- JS [ES5] 如何使用资源库和获取器分配对象
- 正在破坏分配.分配对象和它's的孩子在两个不同的变量中
- 我们是否可以安全地从套接字参数的回调中分配对象引用
- 如何在 ng-repeat 中按键分配对象数组
- 在 jQuery/JavaScript 中动态分配对象属性以通过 ajax 发布
- 在Javascript中分配对象:浅拷贝或深度拷贝
- 在JavaScript中分配对象属性会以一种奇怪的方式更改对象
- 自动分配对象数字键
- React:如何分配对象道具的默认属性
- Lodash重新分配对象数组来构建树
- ES6/7中选择性地分配对象属性
- 如何使用“闭包”异步分配对象
- 无法使用sessionStorage分配对象
- 在数组javascript中分配对象
- 当ES6中存在结构相似性时,减少分配对象属性的冗余
- AngularJS:重新分配对象与替换控制器中的对象
- Angular$scope未按预期工作.正在尝试在控制器$scope和$scope.function作用域中分配对象值
- 在js中取消分配对象字面值使用的内存