仅当密钥与条件匹配时才提取POJO值

时间:2017-01-29 17:49:50

标签: javascript

在下面的代码中,我想只提取分配给以字符串“option”开头的键的值。但是,.map()返回一个对象键数组而不是它们的值。

var x = {

  one : 100,
  option1 : 'A', 
  option2 : 'B',
  opt : 'C'
}

var y = Object.keys(x).filter(key => {
  if (key.match(/^option\d*$/)) {
    return x[key]
  }
})

console.log(y) // returns ["option1", "option2"], should be ['A', 'B']

2 个答案:

答案 0 :(得分:3)

您想使用reduce代替过滤器。 Filter使用返回值作为布尔值来过滤原始数组,而不是创建新数组。

var x = {
  one : 100,
  option1 : 'A', 
  option2 : 'B',
  opt : 'C'
}

var y = Object.keys(x).reduce((options, key) => {
  if (key.match(/^option\d*$/)) {
    options.push(x[key])
  }
  return options
}, [])

console.log(y) // returns ['A', 'B']

答案 1 :(得分:1)

array.map()可以帮助您:

var x = {
  one : 100,
  option1 : 'A',
  option2 : 'B',
  opt : 'C'
}
var y = Object.keys(x).filter(key => key.match(/^option\d*$/)).map(key => x[key]);
console.log(y);