为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 JavaScript split() 方法即使没有分隔符也会返回一个数组?

为什么 JavaScript split() 方法即使没有分隔符也会返回一个数组?

呼如林 2021-06-01 13:46:21
我有一个 html 元素网格,每个元素都有一个data-category属性。一些data-category属性有多个值,用逗号分隔:data-category="category 2, category 3"。有些具有单个值:data-category="category 1",没有分隔符。我使用这个简单的脚本按类别过滤元素:$('#category-selector').on('change', function(){  var $item = $('#items-container').find('.item'),      current = $(this).val();    if(current == 'all'){       $item.fadeIn(200);    } else {       $item.hide(200);       $item.each(function(){          var category = $(this).data('category').split(', ');          //console.log(category);          if($.inArray(current, category) >= 0){            $(this).fadeIn(200);          }       });    }});.posts-grid {  margin-top: 25px;}.posts-grid>[class*='col-'] {  display: flex;  flex-direction: column;  margin-bottom: 25px;}.posts-grid .block {  background: #fff;  border-top: 1px solid #d5d5d5;  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.11);}.posts-grid p {  margin: 0;  text-align: center;}.posts-grid .block {  flex-grow: 1;  display: flex;  justify-content: center;  flex-direction: column;}.posts-grid .read-more {  margin-top: auto;}@media (max-width: 767px) {  .container {    max-width: 100%;  }}@media (max-width: 575px) {  .container {    max-width: 100%;    padding-left: 0;    padding-right: 0;  }  .posts-grid>[class*='col-'] {    padding-left: 5px;    padding-right: 5px;  }}我(愉快地)惊讶于我的split(', ')方法返回一个数组,即使没有 separator。问题:为什么会发生这种情况?我的过滤器可靠吗?
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

该split方法旨在以这种方式工作。从文档:

找到后,从字符串中删除分隔符,并在数组中返回子字符串。如果未找到或省略了分隔符,则数组包含一个由整个字符串组成的元素。


如果您想要一个行为不同的方法,您可以在 split() 之上编写一个包装器,当字符串没有分隔符时返回其他内容(您希望它返回什么?)


您的过滤器看起来仍然很好——您正在检查类别的名称是否在数组中;如果数组只包含一个与类别名称对应的元素,则会找到它;如果数组由一个空字符串元素组成,则不会找到它——两者都是正确的行为。


查看完整回答
反对 回复 2021-06-03
  • 2 回答
  • 0 关注
  • 653 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信