如何根据属性键过滤对象属性?

时间:2020-08-18 13:39:17

标签: javascript filter

我有一个对象

> state
{ homeStreet1: 'a', homeStreet2: 'b', homeStreet3: 'c', State: 'MA' }

> Object.entries(state)
[
  [ 'homeStreet1', 'a' ],
  [ 'homeStreet2', 'b' ],
  [ 'homeStreet3', 'c' ],
  [ 'State', 'MA' ]
]

如何从该对象创建一个新对象以过滤出属性?

我能做

> Object.entries(state).filter(([key,value]) => { return key !== 'homeStreet3' })

这给了我

> [ [ 'homeStreet1', 'a' ], [ 'homeStreet2', 'b' ], [ 'State', 'MA' ] ]

作为具有所需值的新数组,但如何将其作为对象?

3 个答案:

答案 0 :(得分:3)

您可以通过两种方式选择最适合自己的方式

const arr = [
  ["homeStreet1", "a"],
  ["homeStreet2", "b"],
  ["State", "MA"],
]

const res1 = Object.fromEntries(arr)
const res2 = arr.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})

console.log(res1)
console.log(res2)

答案 1 :(得分:2)

最短的方法是针对不需要的属性homeStreet3进行破坏,并得到其余的结果。

const
    state = { homeStreet1: 'a', homeStreet2: 'b', homeStreet3: 'c', State: 'MA' },
    { homeStreet3, ...result } = state;

console.log(result);

答案 2 :(得分:0)

扩展此答案:

const arr = [
  ["homeStreet1", "a"],
  ["homeStreet2", "b"],
  ["State", "MA"],
]

const res1 = Object.fromEntries(arr)
const res2 = arr.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})

console.log(res1)
console.log(res2)

const filteredEntries = Object.entries(state).filter(([key]) => key !== 'homeStreet3')

// This
const newState = filteredEntries.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})

// Or this
const newState = Object.fromEntries(filteredEntries);