在下面的代码中,我想只提取分配给以字符串“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']
答案 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);