Friday, May 10, 2024
 Popular · Latest · Hot · Upcoming
-3
rated 0 times [  3] [ 6]  / answers: 1 / hits: 192917  / 10 Years ago, wed, may 21, 2014, 12:00:00

Can you please tell me how to remove all null and empty string values from an object? I am getting an error while deleting the key.


This is what I have so far, but it doesn't work properly:


$.each(sjonObj, function(key, value) {
if(value == "" || value == null) {
delete sjonObj.key;
}
});



var sjonObj= {
executionMode: SEQUENTIAL,
coreTEEVersion: 3.3.1.4_RC8,
testSuiteId: yyy,
testSuiteFormatVersion: 1.0.0.0,
testStatus: IDLE,
reportPath: ,
startTime: 0,
durationBetweenTestCases: 20,
endTime: 0,
lastExecutedTestCaseId: 0,
repeatCount: 0,
retryCount: 0,
fixedTimeSyncSupported: false,
totalRepeatCount: 0,
totalRetryCount: 0,
summaryReportRequired: true,
postConditionExecution: ON_SUCCESS,
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: a,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
},
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [
{
commandParameters: {
serverAddress: www.ggp.com,
echoRequestCount: ,
sendPacketSize: ,
interval: ,
ttl: ,
addFullDataInReport: True,
maxRTT: ,
failOnTargetHostUnreachable: True,
failOnTargetHostUnreachableCount: ,
initialDelay: ,
commandTimeout: ,
testDuration:
},
commandName: Ping,
testStatus: IDLE,
label: ,
reportFileName: tc_2-tc_1-cmd_1_Ping,
endTime: 0,
startTime: 0,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
postConditionExecution: ON_SUCCESS,
detailReportRequired: true,
summaryReportRequired: true
}
],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: dd,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: b,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
]
};

$.each(sjonObj, function(key, value) {
if(value == || value == null) {
delete sjonObj.key;
}
});

console.log(sjonObj);

<script src=https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js></script>




More From » jquery

 Answers
50

You're deleting sjonObj.key, literally. You need to use array access notation:



delete sjonObj[key];


However, that will also delete where value is equal to 0, since you're not using strict comparison. Use === instead:



$.each(sjonObj, function(key, value){
if (value === || value === null){
delete sjonObj[key];
}
});


However, this will only walk the object shallowly. To do it deeply, you can use recursion:



(function filter(obj) {
$.each(obj, function(key, value){
if (value === || value === null){
delete obj[key];
} else if (Object.prototype.toString.call(value) === '[object Object]') {
filter(value);
} else if ($.isArray(value)) {
$.each(value, function (k,v) { filter(v); });
}
});
})(sjonObj);




var sjonObj = {
executionMode: SEQUENTIAL,
coreTEEVersion: 3.3.1.4_RC8,
testSuiteId: yyy,
testSuiteFormatVersion: 1.0.0.0,
testStatus: IDLE,
reportPath: ,
startTime: 0,
durationBetweenTestCases: 20,
endTime: 0,
lastExecutedTestCaseId: 0,
repeatCount: 0,
retryCount: 0,
fixedTimeSyncSupported: false,
totalRepeatCount: 0,
totalRetryCount: 0,
summaryReportRequired: true,
postConditionExecution: ON_SUCCESS,
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: a,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
},
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [
{
commandParameters: {
serverAddress: www.ggp.com,
echoRequestCount: ,
sendPacketSize: ,
interval: ,
ttl: ,
addFullDataInReport: True,
maxRTT: ,
failOnTargetHostUnreachable: True,
failOnTargetHostUnreachableCount: ,
initialDelay: ,
commandTimeout: ,
testDuration:
},
commandName: Ping,
testStatus: IDLE,
label: ,
reportFileName: tc_2-tc_1-cmd_1_Ping,
endTime: 0,
startTime: 0,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
postConditionExecution: ON_SUCCESS,
detailReportRequired: true,
summaryReportRequired: true
}
],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: dd,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: b,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
]
};

(function filter(obj) {
$.each(obj, function(key, value){
if (value === || value === null){
delete obj[key];
} else if (Object.prototype.toString.call(value) === '[object Object]') {
filter(value);
} else if (Array.isArray(value)) {
value.forEach(function (el) { filter(el); });
}
});
})(sjonObj);

console.log(sjonObj)

<script src=https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js></script>








Note that if you're willing to use a library like lodash/underscore.js, you can use _.pick instead. However, you will still need to use recursion to filter deeply, since neither library provides a deep filter function.



sjonObj = (function filter(obj) {
var filtered = _.pick(obj, function (v) { return v !== '' && v !== null; });
return _.cloneDeep(filtered, function (v) { return v !== filtered && _.isPlainObject(v) ? filter(v) : undefined; });
})(sjonObj);


This variant has the added advantage of leaving the original object unmodified, but it does create an entirely new copy, which would be less efficient if you don't need the original object.





var sjonObj = {
executionMode: SEQUENTIAL,
coreTEEVersion: 3.3.1.4_RC8,
testSuiteId: yyy,
testSuiteFormatVersion: 1.0.0.0,
testStatus: IDLE,
reportPath: ,
startTime: 0,
durationBetweenTestCases: 20,
endTime: 0,
lastExecutedTestCaseId: 0,
repeatCount: 0,
retryCount: 0,
fixedTimeSyncSupported: false,
totalRepeatCount: 0,
totalRetryCount: 0,
summaryReportRequired: true,
postConditionExecution: ON_SUCCESS,
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: a,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
},
{
executionMode: SEQUENTIAL,
commandList: [

],
testCaseList: [
{
executionMode: SEQUENTIAL,
commandList: [
{
commandParameters: {
serverAddress: www.ggp.com,
echoRequestCount: ,
sendPacketSize: ,
interval: ,
ttl: ,
addFullDataInReport: True,
maxRTT: ,
failOnTargetHostUnreachable: True,
failOnTargetHostUnreachableCount: ,
initialDelay: ,
commandTimeout: ,
testDuration:
},
commandName: Ping,
testStatus: IDLE,
label: ,
reportFileName: tc_2-tc_1-cmd_1_Ping,
endTime: 0,
startTime: 0,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
postConditionExecution: ON_SUCCESS,
detailReportRequired: true,
summaryReportRequired: true
}
],
testCaseList: [

],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: dd,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
],
testStatus: IDLE,
boundTimeDurationForExecution: 0,
startTime: 0,
endTime: 0,
label: null,
repeatCount: 0,
retryCount: 0,
totalRepeatCount: 0,
totalRetryCount: 0,
testCaseId: b,
summaryReportRequired: false,
postConditionExecution: ON_SUCCESS
}
]
};

sjonObj = (function filter(obj) {
var filtered = _.pick(obj, function (v) { return v !== '' && v !== null; });
return _.cloneDeep(filtered, function (v) { return v !== filtered && _.isPlainObject(v) ? filter(v) : undefined; });
})(sjonObj);

console.log(sjonObj);

<script src=//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js></script>




[#70926] Sunday, May 18, 2014, 10 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
wilson

Total Points: 27
Total Questions: 93
Total Answers: 93

Location: Tajikistan
Member since Sun, Aug 29, 2021
3 Years ago
wilson questions
Tue, Aug 9, 22, 00:00, 2 Years ago
Wed, May 11, 22, 00:00, 2 Years ago
Wed, May 20, 20, 00:00, 4 Years ago
Wed, May 13, 20, 00:00, 4 Years ago
;