Javascript:添加除数组中的元素以外的所有元素

Javascript:添加除数组中的元素以外的所有元素,javascript,arrays,maps,Javascript,Arrays,Maps,我有一个列索引数组,看起来像[2,4,5],还有一个字符串值键从“0”到“6”的对象 我想创建一个新数组,其中包含原始对象中的所有元素,但键与列索引数组中的任何值匹配的元素除外。我目前就是这样做的,但我对此不满意: const convertObjectToArray = (columnIndexes, rowObject) => { return Object.keys(rowObject).map(key => { let rowValue = '';

我有一个列索引数组,看起来像[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;
    });
};
也许有一个非常简单,直接的方法来做这件事,我只是错过了它

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
     :""
   );

这里有一个非常接近您使用的解决方案:

const convertObjectToArray = (columnIndexes, rowObject) => {
    return Object.keys(rowObject).map(key => {
        let rowValue = '';
        if (columnIndexes.indexOf(key) === -1) {
            rowValue = rowObject[key];
        } 
        return rowValue;        
    });
};

一种简单的方法是重新组织代码,在
行对象上循环时直接构建结果数组

function convertObjectToArray(columnIndexes, rowObject) {
  let res = [];
  for(let key in rowObject)
    if(columnIndexes.indexOf(+key) < 0)
      res.push(rowObject[key]);
  return res;
}
函数convertObjectToArray(columnIndexes,rowObject){
设res=[];
for(让输入行对象)
if(columnIndexes.indexOf(+key)<0)
res.push(rowObject[key]);
返回res;
}
在下面的代码段中使用演示代码:

let excludeColumns=[2,4,5];
让rowObject={
“0”:“值0”,
“1”:“值1”,
“2”:“值2”,
“3”:“值3”,
“4”:“值4”,
“5”:“值5”,
“6”:“值6”
};
console.log(
convertObjectToArray(不包括列、行对象)
);
函数convertObjectToArray(columnIndexes,rowObject){
设res=[];
for(让输入行对象)
if(columnIndexes.indexOf(+key)<0)
res.push(rowObject[key]);
返回res;

}
你能给出一个输入和输出示例吗?
Object.keys(obj).filter(k=>columnIndexes.indexOf(parseInt(k))>=0.map(k=>obj[k])
请注意,你目前的方法在技术上没有过滤掉其他元素;它用空字符串代替它们(这可能是你想要的,也可能不是你想要的)。@辛芬德尔:是的,捕捉得好,这是一个重要的观点。我返回的数组中的元素数应该与原始对象相同。在这种情况下,您的解决方案已经相当简洁了。正如其他人所指出的,您可以用三元表达式替换单个
if
返回columnIndexes.indexOf(parseInt(k))>=0?“”:obj[k]