代码之家  ›  专栏  ›  技术社区  ›  qadenza

以更短的方式从数组中获取字符串

  •  0
  • qadenza  · 技术社区  · 6 年前

    下面的代码有效,但是否有一种方法可以以较短的方式获得结果,即直接从 map 功能,避免 join 线,或者可能避免 arra 在单独的行中声明?

    let arra = $('.imga').toArray();
    
    var arrb = arra.map(function(el) {
    	return $(el).attr('data-id');
    });
    
    let str = arrb.join();
    
    console.log(str);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <img class='imga' src='images/5b0fd05fa00e7.jpg' data-id=442 alt='img'>
    <img class='imga' src='images/5b0fd09fa00e7.jpg' data-id=2 alt='img'>
    <img class='imga' src='images/5b0fd07fa00e7.jpg' data-id=54 alt='img'>
    <img class='imga' src='images/5b0fd03fa00e7.jpg' data-id=45 alt='img'>
    5 回复  |  直到 6 年前
        1
  •  3
  •   Roham Tehrani M. S.M    6 年前

    如果要减少行数,请在代码中使用链接:

    let str = $('.imga').toArray().map(function(el) {
        return $(el).attr('data-id');
    }).join();
    
        2
  •  2
  •   Mario    6 年前

    在一行代码中尝试以下解决方案

    const string = [...document.querySelectorAll('.imga')].map(item => item.dataset.id).join(',');
    
    console.log(string);
    <img class='imga' src='images/5b0fd05fa00e7.jpg' data-id=442 alt='img'>
    <img class='imga' src='images/5b0fd09fa00e7.jpg' data-id=2 alt='img'>
    <img class='imga' src='images/5b0fd07fa00e7.jpg' data-id=54 alt='img'>
    <img class='imga' src='images/5b0fd03fa00e7.jpg' data-id=45 alt='img'>
        3
  •  2
  •   Andy    6 年前

    不是强制转换到数组,而是使用jquery的 map 获取数据属性,然后 get 最后 join . 因为代码使用回调参数而不是 this 我们可以用一个箭头函数把它全部粘在一行上。

    const str = $('.imga').map((i, v) => v.dataset.id).get().join();
    
    console.log(str);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <img class='imga' src='images/5b0fd05fa00e7.jpg' data-id=442 alt='img'>
    <img class='imga' src='images/5b0fd09fa00e7.jpg' data-id=2 alt='img'>
    <img class='imga' src='images/5b0fd07fa00e7.jpg' data-id=54 alt='img'>
    <img class='imga' src='images/5b0fd03fa00e7.jpg' data-id=45 alt='img'>
        4
  •  1
  •   Code Maniac    6 年前

    您可以使用Reduce。

    let arra = $('.imga').toArray();
    
    var arrb = arra.reduce((op,el, index)=>{
       op += $(el).attr('data-id')
       if(index !== arra.length-1) op += ','
       return op;
    },'');
    
    console.log(arrb);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <img class='imga' src='images/5b0fd05fa00e7.jpg' data-id=442 alt='img'>
    <img class='imga' src='images/5b0fd09fa00e7.jpg' data-id=2 alt='img'>
    <img class='imga' src='images/5b0fd07fa00e7.jpg' data-id=54 alt='img'>
    <img class='imga' src='images/5b0fd03fa00e7.jpg' data-id=45 alt='img'>
        5
  •  -1
  •   MathKimRobin    6 年前

    也许你应该试着逃离 join 不需要的部分。这样地

    let arra = $('.imga').toArray(), 
        str = '' ;
    
    var arrb = arra.forEach(function(el) {
        str += el.dataset.id;
    });
    
    console.log(str);