过去几个月我一直在玩JavaScript,发现它在多年不使用之后真的很爽快。什么是最简洁的方式来转换JavaScript“几乎数组”到“数组”?
也就是说,有一点特别令我困扰的是它的'如何描述的不一致'[]“构造。
特别是,我习惯了让数组拥有一个“地图”功能,但很多东西都是“[]” - 不支持地图,但通常支持同义词,有时根本不支持。
例子:
- 的document.getElementById( '我-DIV')儿童
拥有所有我每一个需要映射在它的时间没有mappability和,我不得不求助于for循环。
- document.querySelectorAll( '#我-DIV *')
- jQuery的地图工作正常。例如
$('#my-div *')
有map :: callback -> array that supports map operation
。所以它可以按预期链接。
具有forEach :: callback -> undefined
不同于地图,不返回一个数组,所以链接变换被“奇怪”,因为除了映射到对象之外,还必须将结果存储在数组中以继续。
这意味着以下不起作用。
(() => {
document.querySelectorAll('#my-div *').forEach((divObject) => {
console.log('found a ' + divObject.tagName + '.');
return divObject;
}).forEach((divObject) => {
console.log('more transformations on ' + divObject.tagName + '.');
return divObject;
});
})();
但这种意愿:
(() => {
var children = [];
document.querySelectorAll('#my-div *').forEach((divObject) => {
children.push(divObject);
});
children.map((divObject) => {
console.log('found a ' + divObject.tagName + '.');
return divObject;
}).map((divObject) => {
console.log('more transformations on ' + divObject.tagName + '.');
return divObject;
});
})();
但元素“一一”复制一个foreach里面是没有实际意义的,一般发布的代码之前,必须优化掉只是额外的工作像这样,因为这对于没有充分理由的表现是不利的。
问题:
有没有克服的不是阵列具有类似的接口(似乎是“阵列”,但不支持Array.prototype.map的东西)的inconsistancy一个更清洁的方式使用for循环执行第一次迭代,只有在知道其行为与您认为它的行为方式后,才会推送内容?
'var properArray = [... arrayLike]'或'var properArray = Array.from(arrayish)' – Redu
这似乎比手动逐一复制效率更高。我所要做的只是'Array.from(document.querySelectorAll('#checkboxes [type =“checkbox”]'))'现在我可以映射^ _ ^。你可以自己做出答案,我可以接受吗? – Dmitry
@Dmitry就“效率”而言,没有多少区别; Redu提到的那两种方法也将执行逐元转移。 – Pointy