Javascript 从对象中删除行

Javascript 从对象中删除行,javascript,jquery,Javascript,Jquery,我有一个包含数组的对象: <script type="text/javascript"> var statusData = { Status: [] }; var uniqueCounter = 1 function createJsonFmtData() { // Used as unique id at client side var uniqueCounter =uniqueCo

我有一个包含数组的对象:

<script type="text/javascript">
    var statusData = {
        Status: []
    };

    var uniqueCounter = 1

    function createJsonFmtData() {      

        // Used as unique id at client side 
        var uniqueCounter =uniqueCounter + 1;

        statusData.Status.push({
            "Name": Name,
            "Time": Time,
            "Email": Mail,
            "Name": Type,
            "Value": Value,
            "uniqueId": uniqueCounter
        });
    }

    function DelNewlyCreStatusRow(rowId) {
        // First pop elment from json data
        var val;
        for (val = 0; val < statusData.Status.length; ++val) {
            if (statusData.Status[val].uniqueId == rowId) {
                delete statusData.Status[val];
                break;
            }
        }
</script>

变量状态数据={
地位:[]
};
var uniqueCounter=1
函数createJsonFmtData(){
//在客户端用作唯一id
var uniqueCounter=uniqueCounter+1;
statusData.Status.push({
“姓名”:姓名,
“时间”:时间,
“电子邮件”:邮件,
“名称”:类型,
“价值”:价值,
“uniqueId”:uniqueCounter
});
}
函数delnewlycrestastRow(rowId){
//来自json数据的第一个pop元素
var-val;
对于(val=0;val
尝试调用
DelNewlyCreStatusRow
时,会出现以下错误:

TypeError:statusData。状态[val]未定义

我无法在这里找到它,因为我已经宣布它是全局的。

您应该替换它

delete statusData.Status[val];

删除数组中的对象。

您应该替换

delete statusData.Status[val];


删除数组中的对象。

这是因为您试图从数组中不正确地删除对象。
delete
运算符在数组中非常有趣。它用
未定义的
替换元素。请检查以下内容:

>>> var A = [1, 2, 3];
>>> delete a[1];
>>> A;
[1, undefined, 3];
因此,多次调用
DelnewlyRestatusRow
将引发异常,因为无法计算
statusData.Status[val].uniqueId
statusData.Status[val]
undefined

要解决此问题,请使用此代码而不是
删除

var val;
for (val = 0; val < statusData.Status.length; ++val) {
    if (statusData.Status[val].uniqueId == rowId) {
        statusData.Status.splice( val, 1 );
        break;
    }
}
var;
对于(val=0;val

请注意,
splice
修改数组,因此如果您想一次完成多个删除操作,则必须将
for
循环替换为
while
(并稍微重构代码)。由于
break
语句,此处不需要此操作。

这是因为您试图从数组中错误地删除。
delete
运算符在数组中非常有趣。它将元素替换为
undefined
。请检查此项:

>>> var A = [1, 2, 3];
>>> delete a[1];
>>> A;
[1, undefined, 3];
因此,多次调用
DelnewlyRestatusRow
将引发异常,因为无法计算
statusData.Status[val].uniqueId
statusData.Status[val]
undefined

要解决此问题,请使用此代码而不是
删除

var val;
for (val = 0; val < statusData.Status.length; ++val) {
    if (statusData.Status[val].uniqueId == rowId) {
        statusData.Status.splice( val, 1 );
        break;
    }
}
var;
对于(val=0;val

请注意,
splice
修改数组,因此如果您想一次执行多个删除操作,则必须将
for
循环替换为
while
(并稍微重构代码)。这里不需要这样做,因为
break
语句。

函数delnewlycretasrow缺少一个结束“}”

function DelNewlyCreStatusRow(rowId) {
    // First pop elment from json data
    var val;
    for (val = 0; val < statusData.Status.length; ++val) {
        if (statusData.Status[val].uniqueId == rowId) {
            delete statusData.Status[val];
            break;
        }
    }
}
函数delnewlycrestastRow(rowId){
//来自json数据的第一个pop元素
var-val;
对于(val=0;val
函数delnewlycrestastRow缺少一个结束“}”

function DelNewlyCreStatusRow(rowId) {
    // First pop elment from json data
    var val;
    for (val = 0; val < statusData.Status.length; ++val) {
        if (statusData.Status[val].uniqueId == rowId) {
            delete statusData.Status[val];
            break;
        }
    }
}
函数delnewlycrestastRow(rowId){
//来自json数据的第一个pop元素
var-val;
对于(val=0;val
在函数中的第二个var声明中,您的代码出现了一个错误。 var uniqueCounter=uniqueCounter+1=>NAN+1。 您不需要第二次使用var,所以它只是 唯一计数器=唯一计数器+1=>2

那么删除在我的情况下就可以了

<script type="text/javascript">

        var statusData = {
            Status : []
        };

        var uniqueCounter = 1

        function createJsonFmtData() {

            var statusName = $('#<%= ddlStatus.ClientID %> option:selected').text();
            var dateTime = $("#body_ctl04_ctl02").val();
            var forceMail = ($("#chkForceMail").is(':checked')) ? 1 : 0;
            var noteType = $('#divTrackId').text();
            var dataValue = $("#<%=txtTrackId.ClientID %>").val();
            var curLogedUserName = $("#<%=curLoginUserName.ClientID %>").val();

            // Used as unique id at client side
            uniqueCounter = uniqueCounter + 1;

            statusData.Status.push({

                "statusName" : statusName,
                "dateTime" : dateTime,
                "forceEmail" : forceMail,
                "typeName" : noteType,
                "dataValue" : dataValue,
                "uniqueId" : uniqueCounter
            });
        }

        function DelNewlyCreStatusRow(rowId) {

            // First pop elment from json data
            var val;
            for ( val = 0; val < statusData.Status.length; ++val) {
                if (statusData.Status[val].uniqueId == rowId) {
                    console.log(typeof(statusData.Status[val]));
                    delete statusData.Status[val];
                    break;
                }
            }
        }
        createJsonFmtData();
        console.log(statusData);
        DelNewlyCreStatusRow(2);
        console.log(statusData);
    </script>

变量状态数据={
地位:[]
};
var uniqueCounter=1
函数createJsonFmtData(){
var statusName=$(“#选项:选定”).text();
var dateTime=$(“#body_ctl04_ctl02”).val();
var forceMail=($(“#chkForceMail”).is(':checked')?1:0;
var noteType=$('#divTrackId').text();
var dataValue=$(“#”)val();
var currogedUserName=$(“#”)val();
//在客户端用作唯一id
唯一计数器=唯一计数器+1;
statusData.Status.push({
“statusName”:statusName,
“日期时间”:日期时间,
“forceMail”:forceMail,
“typeName”:noteType,
“数据值”:数据值,
“uniqueId”:uniqueCounter
});
}
函数delnewlycrestastRow(rowId){
//来自json数据的第一个pop元素
var-val;
对于(val=0;val
在函数中的第二个var声明中,您的代码出现了一个错误。 var uniqueCounter=uniqueCounter+1=>NAN+1。 您不需要第二次使用var,所以它只是 唯一计数器=唯一计数器+1=>2

那么删除在我的情况下就可以了

<script type="text/javascript">

        var statusData = {
            Status : []
        };

        var uniqueCounter = 1

        function createJsonFmtData() {

            var statusName = $('#<%= ddlStatus.ClientID %> option:selected').text();
            var dateTime = $("#body_ctl04_ctl02").val();
            var forceMail = ($("#chkForceMail").is(':checked')) ? 1 : 0;
            var noteType = $('#divTrackId').text();
            var dataValue = $("#<%=txtTrackId.ClientID %>").val();
            var curLogedUserName = $("#<%=curLoginUserName.ClientID %>").val();

            // Used as unique id at client side
            uniqueCounter = uniqueCounter + 1;

            statusData.Status.push({

                "statusName" : statusName,
                "dateTime" : dateTime,
                "forceEmail" : forceMail,
                "typeName" : noteType,
                "dataValue" : dataValue,
                "uniqueId" : uniqueCounter
            });
        }

        function DelNewlyCreStatusRow(rowId) {

            // First pop elment from json data
            var val;
            for ( val = 0; val < statusData.Status.length; ++val) {
                if (statusData.Status[val].uniqueId == rowId) {
                    console.log(typeof(statusData.Status[val]));
                    delete statusData.Status[val];
                    break;
                }
            }
        }
        createJsonFmtData();
        console.log(statusData);
        DelNewlyCreStatusRow(2);
        console.log(statusData);
    </script>

变量状态数据={
地位:[]
};
var uniqueCounter=1
函数createJsonFmtData(){