[英]how to render array of object in html element using javascript using map function ? Pure Javascript
[英]how to build a javascript object using an array and the map function?
我有一个通道数组 ,我想将其转换为单个对象 (channelSettings), 每个通道都有一个true / false 属性 。
我已经使用下面的代码工作,但它似乎很冗长。 没有“temp”变量,有没有办法做到这一点? 如果我能够驾驭它,那么我也可以驾驭自动执行功能。
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/
第一个参数引用先前返回的项,第一次迭代除外,它引用数组中的第一项或者我们作为空对象提供的种子项。
第二个参数引用Array中的当前值。 只要我们总是返回obj
,第一个参数将始终是该对象,最终返回值也是如此。
map
函数接受一个数组,并返回一个数组。 没有其他的。 但你可以使用reduce
:
var settings = ["TV", "Billboard", "Spot TV"].reduce(function(obj, item) {
obj[item.toLowerCase().replace(" ", "")] = false; // probably too concise
return obj // yay, we can skip a semi-colon here :-P
}, {});
好吧,“我不是我”打败了它,但无论如何:
map
不仅返回数组,还返回与原始数组长度相同的数组。 它用于将一个数组的值1:1转换为新数组。 reduce
意味着“将数组减少到单个值”。 因此它在这里使用。
如果使用直接for
循环或forEach
方法向对象添加属性,则需要声明该对象。 所以,不,你不能在代码中没有temp
(除非你使用reduce
而不是循环)。
有关MDN的更多信息:
嗯..看起来像在这样的函数中包装它会这样做。
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
if (arr[i] !== undefined) rv[arr[i]] = true;
return rv;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.