使用对象键组成数组

时间:2018-09-17 03:35:35

标签: javascript

考虑遵循代码

const filterArray = ['a', 'b']
const objectToBeFilter = {
  a: {
    ab: 'ab',
    ac: 'ac',
    ad: 'ad'
  },
  b: {
    bb: 'bb',
    bc: 'bc',
    bd: 'bd'
  },
  c: {
    cb: 'cb',
    cc: 'cc',
    cd: 'cd'
  }
}

const resultWantToGet = [
  a: {
    ab: 'ab',
    ac: 'ac',
    ad: 'ad'
  },
  b: {
    bb: 'bb',
    bc: 'bc',
    bd: 'bd'
  }
]

FilterArray是要用作过滤器索引的数组,objectToBeFilter是我要处理的对象。如何使用filterArray过滤objectToBeFilter,然后将其转换为数组resultWantToGet

4 个答案:

答案 0 :(得分:1)

您可以map filterArray并传播到一个新对象中:

const filterArray = ['a', 'b']
const objectToBeFilter = {
  a: {
    ab: 'ab',
    ac: 'ac',
    ad: 'ad'
  },
  b: {
    bb: 'bb',
    bc: 'bc',
    bd: 'bd'
  },
  c: {
    cb: 'cb',
    cc: 'cc',
    cd: 'cd'
  }
};
console.log({
  ...filterArray.map(key => ({ [key]: objectToBeFilter[key] }))
});

或者,如果您不想创建中间对象,请使用reduce

const filterArray = ['a', 'b']
const objectToBeFilter = {
  a: {
    ab: 'ab',
    ac: 'ac',
    ad: 'ad'
  },
  b: {
    bb: 'bb',
    bc: 'bc',
    bd: 'bd'
  },
  c: {
    cb: 'cb',
    cc: 'cc',
    cd: 'cd'
  }
};
console.log(filterArray.reduce((a, prop) => {
  a[prop] = objectToBeFilter[prop];
  return a;
}, {}));

答案 1 :(得分:1)

您可以使用type(matrix)循环并构造新对象。

reduce

答案 2 :(得分:1)

您可以使用以下代码Object.keys(objectToBeFilter)获取已过滤对象键的列表,然后过滤器数组.filter(key => filterArray.includes(key))中包含的过滤键,然后仅使用已过滤属性reduce((obj, key)构造新对象

const filterArray = ['a', 'b']
const objectToBeFilter = {
  a: {
    ab: 'ab',
    ac: 'ac',
    ad: 'ad'
  },
  b: {
    bb: 'bb',
    bc: 'bc',
    bd: 'bd'
  },
  c: {
    cb: 'cb',
    cc: 'cc',
    cd: 'cd'
  }
}

const resultWantToGet =  Object.keys(objectToBeFilter)
  .filter(key => filterArray.includes(key))
  .reduce((obj, key) => {
    obj[key] = objectToBeFilter[key];
    return obj;}, {});

console.log(resultWantToGet)

答案 3 :(得分:1)

根据您的最新评论,您似乎想要一个对象数组。您可以轻松地做到这一点,它将为您提供数组中键为objectToBeFiltera的{​​{1}}中的对象:

b

这看起来与预期结果不同,因为数组没有键。如果要用键标识每个项目,则可能需要一个对象,但是如果要有序集合,则可以使用数组。