Jquery-如何删除数组中特定记录后的逗号

Jquery- How to remove comma after a specific record in an array

本文关键字:记录 数组 何删除 删除 Jquery-      更新时间:2023-09-26

我正在使用datatables mRender函数生成一个用逗号分隔的列中的项目列表。我想从列表中删除一个特定的记录,而该记录位于数组中记录列表的末尾。类似这样的东西:

LESS,SAAS,REST,API

我想删除最后一条记录(API,我这样做了),然而,当我删除它时,逗号仍然粘在它的最后,导致类似于:

LESS,SAAS,REST,
LESS,SAAS,

假设逗号之后的记录一直是CCD_ 2。如何删除记录以及后面的逗号??EDIT:这就是我的代码,我通过传递空字符串来删除API。请建议这方面可以做得更好。

mRender: function (obj) {
    _.each(obj, function(item, index){
        var prodVal = "";
        else if (item === 'API'){
            prodVal = '';
        }
        returnVal.push("<span class='product'>" + prodVal + "</span>");
    });
    return returnVal.join(', ');
}

有什么想法吗???

谢谢!

删除最后一个元素

根据您使用的是数组、对象还是字符串,有几种不同的处理方法。在您的示例中,它看起来像是将值设置为空,而不是删除条目,这就是为什么在使用returnVal.join(', ')后会得到一个额外的逗号。

从数组中删除最后一个元素

var mRecord = ["LESS","SAAS","REST","API"];
mRecord.pop();
console.log(mRecord); // Array( [0] => "LESS", [1] => "SAAS", [2] => "REST" )
console.log(mRecord.join()); // String "LESS,SAAS,REST"

从字符串中删除最后一个元素

// with simple built-in functions - will perform better in your example
mRecord = mRecord.substring(0, str.lastIndexOf(",") - 1);
// with regex - may perform better with larger strings
mRecord  = mRecord.replace(/,[^,]+$/, "");

删除对象的最后一个成员

虽然我不确定您正在处理的对象的结构,但您可能正在使用delete mRecord[member]的一些变体。

目前,prodVal = ''会将条目留在数组中,导致returnVal.join(', ')在最后一个值和空值之间包含一个额外的","。

您的代码包含一个else if,但不包含初始的if声明。我怀疑,如果你在主条件内移动推送并返回,它可能会按照你的意愿工作

mRender: function (obj) {
    _.each(obj, function(item, index){
        var prodVal = "";
        if (item === 'API'){
            prodVal = '';
            // edit: your best bet is to generate a new array or object to act on
            //       rather than trying to unset the item here.
        } else {
            returnVal.push("<span class='product'>" + prodVal + "</span>");
        }
        
    });
    return returnVal.join(', ');
}

使用此

 var str = "LESS,SAAS,REST,API";
 var res = str.split(",");
 res.pop();
 console.log(res.join(","));
  1. 分解成阵列,即var arr = 'LESS,SAAS,REST,API'.split(',')
  2. 删除元素,即av.splice(av.length-1,1); //<- removes last element
  3. 再次加入生成字符串av.join(',')
var list = 'LESS,SAAS,REST,';
list = list.substring(0, list.length);

有很多方法可以做到这一点,但我认为将字符串拆分成一个数组,过滤掉数组,然后重新连接成一个字符串将是最稳健的&灵活的

类似这样的东西:

var items = 'LESS,SAAS,REST,API'.split( ',' );
items = items.filter(function( item ) { /* return false for anything you want to remove */ });
console.log( items.join( ',' ) );

几个相关链接:

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join

这将从这个示例数组中删除7,显示splice如何工作

var anArray = [ "1", "2", "3", "4", "5", "6", "7" ];        
anArray.splice(-1);

将给出123456(没有数组中最后一个元素的7)

这里有一个jsfiddle显示它在中的作用

这是一个非常简单的函数,正适合您的需要。试试看,让我知道你的想法:

   $(document).ready(function() {
        var string = "LESS,SAAS,REST,API";
        var array = string.split(",");
        function delete_last(elem) {
            var index = array.indexOf(elem);
            array.splice(index, 1);
            return array.join(",");
        }
        var results = delete_last("API");
        console.log(results);
    });