Javascript 如何将键值传递给.map函数
不知道是否有人能向我解释一下:我已经通过在mapJavascript 如何将键值传递给.map函数,javascript,Javascript,不知道是否有人能向我解释一下:我已经通过在map函数中手动声明“键”实现了我想要的结果 我正在努力理解如何在map函数中传递键,以便可以轻松调用valueMapper('key'),以获得相同的结果(下面的示例) 我发现了一些解决方案,但似乎没有一个是有意义的。请给这个方法添加一些背景知识,我对这个过程比对解决方案更感兴趣 谢谢你的帮助 var users = [ {firstName: 'Pete', lastName: 'Barrat', favoriteFood: 'Pizza', a
函数
中手动声明“键
”实现了我想要的结果
我正在努力理解如何在map函数中传递键,以便可以轻松调用valueMapper('key')
,以获得相同的结果(下面的示例)
我发现了一些解决方案,但似乎没有一个是有意义的。请给这个方法添加一些背景知识,我对这个过程比对解决方案更感兴趣
谢谢你的帮助
var users = [
{firstName: 'Pete', lastName: 'Barrat', favoriteFood: 'Pizza', age: 30},
{firstName: 'Lisa', lastName: 'Jenkins', favoriteFood: 'Curry', age: 34},
{firstName: 'Bob', lastName: 'Yates', favoriteFood: 'Fish', age: 54},
{firstName: 'Claire', lastName: 'Smith', favoriteFood: 'Steak', age: 21},
{firstName: 'Adam', lastName: 'Johnson', favoriteFood: 'Pasta', age: 27}
]
// write a function call valueMapper
// valueMapper takes one argument which is the name of a key
// it returns an array of all the values in the users array that correspond to that key
// examples:
// valueMapper('favoriteFood')
// -> ['Pizza', 'Curry', 'Fish', 'Steak', 'Pizza']
// valueMapper('firstName')
// -> ['Pete', 'Lisa', 'Bob', 'Claire', 'Adam']
/* #1st solution, I managed to get the answers I'm looking for, but I haven't defined
the valueMapper function and I haven't passed it a key yet */
var lastName = users.map(function(users) {
return users['lastName'];
})
console.log(lastName);
/* #2nd solution is an attempt to create an anonymous function so that
I can pass through a key to the function in order to read the same results*/
function valueMapper() {Object.keys(users).map(function(key) {
return users[key];
});
}
console.log(valueMapper('firstName'));
valueMapper
),则它不是匿名函数
Object.Keys
迭代属性。但是,作为gaurd,您可以检查传入的属性名称是否与对象上的现有属性匹配
您可能正在寻找如下所示的解决方案
var用户=[
{名字:'Pete',姓氏:'Barrat',最喜欢的食物:'Pizza',年龄:30},
{名字:“丽莎”,姓氏:“詹金斯”,最喜欢的食物:“咖喱”,年龄:34},
{名字:“鲍勃”,姓氏:“耶茨”,最喜欢的食物:“鱼”,年龄:54},
{名字:“克莱尔”,姓氏:“史密斯”,最喜欢的食物:“牛排”,年龄:21},
{名字:亚当,姓氏:约翰逊,最喜欢的食物:意大利面,年龄:27}
]
//编写一个函数调用valueMapper
//valueMapper接受一个参数,该参数是键的名称
//它返回用户数组中与该键对应的所有值的数组
//示例:
//valueMapper('favoriteFood')
//->[“比萨饼”、“咖喱”、“鱼”、“牛排”、“比萨饼”]
//valueMapper('firstName')
//->[“皮特”、“丽莎”、“鲍勃”、“克莱尔”、“亚当”]
/*#第一个解决方案,我设法得到了我想要的答案,但我还没有定义
valueMapper函数,我还没有给它传递一个键*/
var lastName=users.map(函数(用户){
返回用户['lastName'];
})
console.log(lastName);
/*#第二种解决方案是尝试创建匿名函数,以便
我可以通过该函数的一个键来读取相同的结果*/
函数值映射器(PassedKey){
返回users.map(函数(用户){
if(user.hasOwnProperty(passedKey)){
返回用户[PassedKey];
}
});
}
log(valueMapper('firstName'))代码>
如果命名函数(valueMapper
),则它不是匿名函数
在将属性值作为参数传递给函数时,不需要使用Object.Keys
迭代属性。但是,作为gaurd,您可以检查传入的属性名称是否与对象上的现有属性匹配
您可能正在寻找如下所示的解决方案
var用户=[
{名字:'Pete',姓氏:'Barrat',最喜欢的食物:'Pizza',年龄:30},
{名字:“丽莎”,姓氏:“詹金斯”,最喜欢的食物:“咖喱”,年龄:34},
{名字:“鲍勃”,姓氏:“耶茨”,最喜欢的食物:“鱼”,年龄:54},
{名字:“克莱尔”,姓氏:“史密斯”,最喜欢的食物:“牛排”,年龄:21},
{名字:亚当,姓氏:约翰逊,最喜欢的食物:意大利面,年龄:27}
]
//编写一个函数调用valueMapper
//valueMapper接受一个参数,该参数是键的名称
//它返回用户数组中与该键对应的所有值的数组
//示例:
//valueMapper('favoriteFood')
//->[“比萨饼”、“咖喱”、“鱼”、“牛排”、“比萨饼”]
//valueMapper('firstName')
//->[“皮特”、“丽莎”、“鲍勃”、“克莱尔”、“亚当”]
/*#第一个解决方案,我设法得到了我想要的答案,但我还没有定义
valueMapper函数,我还没有给它传递一个键*/
var lastName=users.map(函数(用户){
返回用户['lastName'];
})
console.log(lastName);
/*#第二种解决方案是尝试创建匿名函数,以便
我可以通过该函数的一个键来读取相同的结果*/
函数值映射器(PassedKey){
返回users.map(函数(用户){
if(user.hasOwnProperty(passedKey)){
返回用户[PassedKey];
}
});
}
log(valueMapper('firstName'))代码>一种解决方案是构建一个如下所示的哈希表:
{
key1:Array(“key1的所有值”),
key2:Array('key2'的所有值'),
…}
然后使用此哈希表快速获得结果。这将是一个很好的解决方案,因为您需要构建一次哈希,然后可以以O(1)
的复杂度检索结果
见下例:
var用户=[
{名字:'Pete',姓氏:'Barrat',最喜欢的食物:'Pizza',年龄:30},
{名字:“丽莎”,姓氏:“詹金斯”,最喜欢的食物:“咖喱”,年龄:34},
{名字:“鲍勃”,姓氏:“耶茨”,最喜欢的食物:“鱼”,年龄:54},
{名字:“克莱尔”,姓氏:“史密斯”,最喜欢的食物:“牛排”,年龄:21},
{名字:亚当,姓氏:约翰逊,最喜欢的食物:意大利面,年龄:27}
]
var hash={};
users.forEach((用户)=>{
Object.keys(user.forEach)((key)=>{
哈希[键]=哈希[键]| |新数组();
哈希[key].push(用户[key]);
})
});
函数getKey(key){
返回散列[key]| |[];
}
console.log(getKey('age'));
console.log(getKey('favoriteFood');
log(getKey('hey'))代码>一种解决方案是构建一个如下所示的哈希表:
{
key1:Array(“key1的所有值”),
key2:Array('key2'的所有值'),
…}
然后使用此哈希表快速获得结果。这将是一个很好的解决方案,因为您需要构建一次哈希,然后可以以O(1)
的复杂度检索结果
见下例:
var用户=[
{名字:'Pete',姓氏:'Barrat',最喜欢的食物:'Pizza',年龄:30},
{名字:“丽莎”,姓氏:“詹金斯”,最喜欢的食物:“咖喱”,年龄:34},
{名字:“鲍勃”,姓氏:“耶茨”,最喜欢的食物:“鱼”,年龄:54},
{f
[a, b, c].map(fn) // => [fn(a), fn(b), fn(c)]
// e.g.
[1.5, 2.2, 0.3].map(Math.floor) // => [1, 2, 0]
var pluck = function (collection, field) {
return collection.map(function (item) {
return item[field];
});
};
// e.g.
var albums = [
{ title: 'Colony', release: '1999' },
{ title: 'Clayman', release: '2000' },
{ title: 'Reroute to Remain', release: '2002' }
];
pluck(albums, 'title'); // => ['Colony', 'Clayman', 'Reroute to Remain']
var valueMapper = function (key) {
return users.map(function (user) {
return user[key];
});
};