简体   繁体   English

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

[英]Javascript: Adding all elements but those in an array

I have an array of column indexes that looks like, for example, [2, 4, 5] and an object with string value keys ranging from "0" through "6".我有一个列索引数组,例如 [2, 4, 5] 和一个字符串值键从“0”到“6”的对象。

I want to create a new array containing all elements from my original object except those with keys matching any value in my column index array.我想创建一个新数组,其中包含原始对象中的所有元素,但那些键与列索引数组中的任何值匹配的元素除外。 This is how I'm doing it currently but I'm not happy with it:这就是我目前的做法,但我对此并不满意:

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

Perhaps there is a very simple, straightforward way of doing this and I'm just missing it?也许有一种非常简单,直接的方法可以做到这一点,而我只是想念它?

const convertObjectToArray = (columnIndexes, rowObject) =>
  Object.keys(rowObject)
   .filter( key => columnIndexes.includes(+key))
   .map(key => rowObject[key])

Or if you really want empty strings:或者如果你真的想要空字符串:

const convertObjectToArray = (columnIndexes, rowObject) =>
  Object.entries(rowObject)
   .map(([key, value]) =>
     columnIndexes.includes(+key)
     ?value
     :""
   );

Here's a solution very close to what you were working with:这是一个非常接近您正在使用的解决方案:

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

A straightforward way is to reorganize your code to build the result array directly while looping over the rowObject :一种直接的方法是重新组织代码以在循环遍历rowObject直接构建结果数组:

function convertObjectToArray(columnIndexes, rowObject) {
  let res = [];
  for(let key in rowObject)
    if(columnIndexes.indexOf(+key) < 0)
      res.push(rowObject[key]);
  return res;
}

Working demo code in the snippet below:以下代码段中的工作演示代码:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM