如何在JavaScript中的数组之间放置逗号
How to put a comma between arrays in JavaScript
这里有一个代码。。。
<div id="d1">
<ol>
<li id="li1"></li>
<li id="li2"></li>
</ol>
<div>
<script>
var dod = document.getElementById("d1");
var foo = dod.getElementsByTagName("*");
for(i=0;i<foo.length;i++){
console.log(foo[i].id);
}
</script>
如何在Id之间加逗号?
让我们玩得开心:
console.log(Array.prototype.map.call(document.querySelectorAll("#d1 *"), function(e) {
return e.id;
}).join(", "));
这本来是一个玩笑,但它有一个严肃的核心,并展示了一些方便的东西:
document.querySelectorAll
将为您提供与CSS选择器匹配的元素的(断开连接的)NodeList
。所以#d1 *
给出了#d1
的所有子元素。Array.prototype.map
很乐意用于任何类似数组的对象,它不要求您在实际数组中使用它。Function#call
允许您调用一个函数,并告诉它在函数调用期间this
应该是什么。因此Array.prototype.map.call(document.querySelectorAll("#d1 *"), ...
调用map
,使其使用querySelectorAll
中的NodeList
作为this
。Array.prototype.map
为每个"数组"元素调用一次函数,传入元素,并根据返回的内容构建一个新数组。因此,我们返回e.id
的回调告诉它构建一个id
值的数组。Array.prototype.join
从数组元素构建一个字符串,使用您提供的字符串作为它们之间的分隔符。
并且您从自己的代码中知道console.log
输出它
但在查看HTML时,我们需要将其调整为仅包含实际具有id
值的元素,否则结果中会出现大量空白。这很容易做到,我们只需添加filter
:
console.log(Array.prototype.filter.call(document.querySelectorAll("#d1 [id]"), function(e) {
return e.id !== "";
}).map(function(e) { return e.id; }).join(", "));
有两个变化:
我使用
#d1 [id]
作为选择器,所以我们只返回具有id
属性的元素。我在
.map
之前添加了对.filter
的调用,以筛选出具有id
属性但值为空的元素(遗憾的是,无法在CSS中筛选出这些元素,例如,防御<li id="">
)。
示例
一种方法是:
var separator = ", ";
for(i=0;i<foo.length;i++){
if(i == foo.length - 1) {
separator = "";
}
console.log(foo[i].id + separator);
}
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 效率:整数数组的一个子集中两个项之间的最大差值
- 使用Javascript获取两个字符串之间的字符串数组
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 尝试在一个对象的值和一个对象数组之间进行匹配
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 无法在提交之间清空数组
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 数组和ArrayBuffer之间的区别是什么
- 只有一些带undercore.js的字段在对象数组之间求交集和等于
- 如何在数组中循环,等待每个项目之间的时间
- 在数组中的偶数之间插入连字符
- 创建新数组和清除长度之间的差异
- 如何循环数组并保持它们之间的索引增长
- for(数组中的i)和for(var i=0;i<array.length;i++)之间的差异
- 在javascript数组元素之间添加换行符
- 我如何获得 Javascript 中关联数组和常规数组之间的区别
- 如何确定数组中的值是否位于两个附加数组的所有并行索引的值之间
- 数组值和字符串之间的 JavaScript 比较
- AngularJS控制器语法 - 数组和函数版本之间的差异