我有一个列索引数组,例如,[2,4,5]和一个字符串值键从“0”到“6”的对象。
我想创建一个包含原始对象中所有元素的新数组,除了那些键匹配我的列索引数组中任何值的元素。这就是我现在正在做的事情,但我对它并不满意:
const convertObjectToArray = (columnIndexes, rowObject) => {
return Object.keys(rowObject).map(key => {
let rowValue = '';
if (columnIndexes.indexOf(parseInt(key)) === -1) {
rowValue = rowObject['' + key];
}
return rowValue;
});
};
也许有一种非常简单,直截了当的做法,我只是错过了它?
答案 0 :(得分:1)
const convertObjectToArray = (columnIndexes, rowObject) =>
Object.keys(rowObject)
.filter( key => columnIndexes.includes(+key))
.map(key => rowObject[key])
或者如果你真的想要空字符串:
const convertObjectToArray = (columnIndexes, rowObject) =>
Object.entries(rowObject)
.map(([key, value]) =>
columnIndexes.includes(+key)
?value
:""
);
答案 1 :(得分:0)
这是一个非常接近您正在使用的解决方案:
const convertObjectToArray = (columnIndexes, rowObject) => {
return Object.keys(rowObject).map(key => {
let rowValue = '';
if (columnIndexes.indexOf(key) === -1) {
rowValue = rowObject[key];
}
return rowValue;
});
};
答案 2 :(得分:0)
一种直接的方法是重新组织代码,以便在循环rowObject
时直接构建结果数组:
function convertObjectToArray(columnIndexes, rowObject) {
let res = [];
for(let key in rowObject)
if(columnIndexes.indexOf(+key) < 0)
res.push(rowObject[key]);
return res;
}
在下面的代码段中使用演示代码:
let excludeColumns = [2, 4, 5];
let rowObject= {
'0': 'value 0',
'1': 'value 1',
'2': 'value 2',
'3': 'value 3',
'4': 'value 4',
'5': 'value 5',
'6': 'value 6'
};
console.log(
convertObjectToArray(excludeColumns, rowObject)
);
function convertObjectToArray(columnIndexes, rowObject) {
let res = [];
for(let key in rowObject)
if(columnIndexes.indexOf(+key) < 0)
res.push(rowObject[key]);
return res;
}