我有一个 channel 数组,我想将其转换成一个单个对象 (channelSettings),每个 channel 都有一个 true/false 属性强>。
我已经使用下面的代码让它工作了,但它看起来很冗长。如果没有“临时”变量,有没有办法做到这一点?如果我可以驾驭它,那么我也可以驾驭自执行功能。
var channels = ["TV", "Billboard", "Spot TV"];
var channelSettings = function() {
var temp = {};
channels.map(function(itm, i, a) {
var channel = itm.toLowerCase().replace(" ", "");
temp[channel] = false;
});
return temp;
}();
我想我正在尝试让 map 函数返回一个具有属性的对象而不是一个数组。这可能吗?是误导了吗?有什么建议吗?
这就是我希望它最终看起来的样子:
var channels = ["TV", "Billboard", "Spot TV"];
var channelSettings = channels.map(function(itm, i, a) {
var channel = itm.toLowerCase().replace(" ", "");
return ????;
});
最佳答案
改用 .reduce()
函数。
var channelSettings = channels.reduce(function(obj, itm) {
var channel = itm.toLowerCase().replace(" ", "");
obj[channel] = false;
return obj;
}, {});
演示: http://jsfiddle.net/MjW9T/
第一个参数引用之前返回的项目,除了第一次迭代,它引用数组中的第一个项目,或者我们作为空对象提供的种子项目。
第二个参数引用数组中的当前值。只要我们始终返回 obj
,第一个参数将始终是该对象,最终返回值也是如此。
关于javascript - 如何使用数组和 map 函数构建 javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11006748/