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

时间:2017-10-11 21:25:29

标签: javascript arrays maps

我有一个列索引数组,例如,[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;
    });
};

也许有一种非常简单,直截了当的做法,我只是错过了它?

3 个答案:

答案 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;
}