diff --git a/superset-frontend/src/utils/common.js b/superset-frontend/src/utils/common.js index 603ec7c54992d..400a7d05e0109 100644 --- a/superset-frontend/src/utils/common.js +++ b/superset-frontend/src/utils/common.js @@ -97,7 +97,7 @@ export function prepareCopyToClipboardTabularData(data, columns) { // JavaScript does not maintain the order of a mixed set of keys (i.e integers and strings) // the below function orders the keys based on the column names. const key = columns[j].name || columns[j]; - if (data[i][key]) { + if (key in data[i]) { row[j] = data[i][key]; } else { row[j] = data[i][parseFloat(key)]; diff --git a/superset-frontend/src/utils/common.test.jsx b/superset-frontend/src/utils/common.test.jsx index 6c73b1011cd92..571e493addbff 100644 --- a/superset-frontend/src/utils/common.test.jsx +++ b/superset-frontend/src/utils/common.test.jsx @@ -59,6 +59,16 @@ describe('utils/common', () => { 'lorem\tipsum\t\ndolor\tsit\tamet\n', ); }); + it('includes 0 values', () => { + const array = [ + { column1: 0, column2: 0 }, + { column1: 1, column2: -1, 0: 0 }, + ]; + const column = ['column1', 'column2', '0']; + expect(prepareCopyToClipboardTabularData(array, column)).toEqual( + '0\t0\t\n1\t-1\t0\n', + ); + }); }); describe('applyFormattingToTabularData', () => { it('does not mutate empty array', () => {