编写函数以获取 key/value 对的对象和一个函数,并返回键匹配的值数组
Writing function to take object of key/value pairs and a function, and returning an array of values where key matches
我需要创建一个 javascript 函数,它接受一个 key/value 对的对象,并且
接受一个参数和 returns 布尔值的过滤器函数。该函数应该 return 一个包含来自对象的 values 的数组,filter(key) 为真。
所以我会有一个函数:
function filterValuesByKeys(obj, filter){
//returns array
}
我主要坚持的是基于键遍历对象,如果键 matched/satisfied 参数,则将值添加到数组。我可以打印所有的键,但我不知道如何在循环中单独获取每个键。
在遍历 JavaScript 对象时,您需要谨慎对待要完成的目标。使用 for (var key in obj)
将遍历所有键,以及对象原型链中的任何键。
仅获取对象的 "own" 属性的一种方法是使用 for/in,然后检查
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//do stuff
}
}
另一种更传统的循环方式是使用Object.keys(obj)
获取obj
自己的密钥。然后,您可以对该数组进行常规循环,甚至可以在其上使用 forEach
。
var keys = Object.keys(obj);
keys.forEach(function(key) {
// do stuff
});
还有一些其他巧妙的方法使用原生函数式数组方法,例如 reduce
。我会把它留给你。
function customFilter(v) {
return (v.indexOf('c') === 0);
}
function filterValuesByKeys(obj, filter) {
var ary = [],
keys = Object.keys(obj);
keys.forEach(function(k) {
if (filter(k)) {
ary.push(obj[k]);
}
})
return ary;
}
var person = {
name: 'George',
age: 50,
address: '1 center st',
city: 'some city',
state: 'some state',
country: 'USA'
};
var result = filterValuesByKeys(person, customFilter);
console.log(result);
我需要创建一个 javascript 函数,它接受一个 key/value 对的对象,并且 接受一个参数和 returns 布尔值的过滤器函数。该函数应该 return 一个包含来自对象的 values 的数组,filter(key) 为真。
所以我会有一个函数:
function filterValuesByKeys(obj, filter){
//returns array
}
我主要坚持的是基于键遍历对象,如果键 matched/satisfied 参数,则将值添加到数组。我可以打印所有的键,但我不知道如何在循环中单独获取每个键。
在遍历 JavaScript 对象时,您需要谨慎对待要完成的目标。使用 for (var key in obj)
将遍历所有键,以及对象原型链中的任何键。
仅获取对象的 "own" 属性的一种方法是使用 for/in,然后检查
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//do stuff
}
}
另一种更传统的循环方式是使用Object.keys(obj)
获取obj
自己的密钥。然后,您可以对该数组进行常规循环,甚至可以在其上使用 forEach
。
var keys = Object.keys(obj);
keys.forEach(function(key) {
// do stuff
});
还有一些其他巧妙的方法使用原生函数式数组方法,例如 reduce
。我会把它留给你。
function customFilter(v) {
return (v.indexOf('c') === 0);
}
function filterValuesByKeys(obj, filter) {
var ary = [],
keys = Object.keys(obj);
keys.forEach(function(k) {
if (filter(k)) {
ary.push(obj[k]);
}
})
return ary;
}
var person = {
name: 'George',
age: 50,
address: '1 center st',
city: 'some city',
state: 'some state',
country: 'USA'
};
var result = filterValuesByKeys(person, customFilter);
console.log(result);