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(){