包括18-25岁之间的潜在选民人数,26-35岁之间的潜在选民,36-55岁之间的潜在选民以及每个年龄范围内的实际投票人数。包含此数据的结果对象应具有6个属性。
var voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];
function voterResults(arr) {
// your code here
}
console.log(voterResults(voters)); // Returned value shown below:
/*
{ youngVotes: 1,
youth: 4,
midVotes: 3,
mids: 4,
oldVotes: 3,
olds: 4
}
我正在尝试解决此特定问题,以下是我尝试过的能够形成哈希图的地方。但不确定如何解决上述问题。
function voterResults(arr) {
let votesArray = ['youngVotes', 'youth', 'midVotes', 'mids',
'oldVotes', 'olds']
return votesArray.reduce((acc, it) => {
acc[it] = (acc[it] || 0) + 1
return acc;
}, {})
}
//输出
{
youngVotes: 1 ,
youth: 1 ,
midVotes: 1 ,
mids: 1 ,
oldVotes: 1 ,
olds: 1
}
需要实际输出:
{
youngVotes: 1,
youth: 4,
midVotes: 3,
mids: 4,
oldVotes: 3,
olds: 4
}
答案 0 :(得分:4)
我首先要创建一个辅助函数,该函数返回与传递的年龄相对应的属性字符串(例如20
-> ['youth', 'youngVotes']
)。然后使用.reduce
遍历voters
数组-调用该函数以找出要递增的属性,然后递增该属性:
const getCat = (age) => {
if (age < 25) return ['youth', 'youngVotes'];
if (age < 35) return ['mids', 'midVotes'];
return ['olds', 'oldVotes'];
};
var voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];
const counts = voters.reduce((a, { age, voted }) => {
const [prop, voteProp] = getCat(age);
a[prop] = (a[prop] || 0) + 1;
if (voted) {
a[voteProp] = (a[voteProp] || 0) + 1;
}
return a;
}, {});
console.log(counts);
答案 1 :(得分:1)
您需要使用输入arr,已投票的使用值以及年龄来对对象中的值进行分类和递增。
const voters = [
{name:'Bob' , age: 30, voted: true},
{name:'Jake' , age: 32, voted: true},
{name:'Kate' , age: 25, voted: false},
{name:'Sam' , age: 20, voted: false},
{name:'Phil' , age: 21, voted: true},
{name:'Ed' , age:55, voted:true},
{name:'Tami' , age: 54, voted:true},
{name: 'Mary', age: 31, voted: false},
{name: 'Becky', age: 43, voted: false},
{name: 'Joey', age: 41, voted: true},
{name: 'Jeff', age: 30, voted: true},
{name: 'Zack', age: 19, voted: false}
];
// define your limit here, will check for <= of defined age
let categories = { youngVotes: 21, youth: 30, midVotes: 40, mids: 50, oldVotes: 60, olds: 130}
function voterResults(arr) {
const conditions = Object.entries(categories);
return arr.reduce((val, vote)=>{
if(vote.voted) {
for(let i=0;i<conditions.length;i++) {
if(vote.age <= conditions[i][1]) {
val[conditions[i][0]] = val[conditions[i][0]] ? val[conditions[i][0]] + 1 : 1;
return val;
}
}
}
return val;
}, {})
}
console.log(voterResults(voters));
答案 2 :(得分:1)
这里使用的是reduce
方法,可以轻松扩展年龄段。
function voterResults(arr) {
const ranges = { youngVotes: [18, 25], youth: [26, 35] };
return arr
.filter(x => x.voted)
.reduce((acc, curr) => {
Object.keys(ranges).forEach(key => {
if (curr.age >= ranges[key][0] && curr.age <= ranges[key][1]) {
acc[key] = key in acc ? acc[key] + 1 : 1;
}
});
return acc;
}, {});
}
var voters = [
{ name: "Bob", age: 30, voted: true },
{ name: "Jake", age: 32, voted: true },
{ name: "Kate", age: 25, voted: false },
{ name: "Sam", age: 20, voted: false },
{ name: "Phil", age: 21, voted: true },
{ name: "Ed", age: 55, voted: true },
{ name: "Tami", age: 54, voted: true },
{ name: "Mary", age: 31, voted: false },
{ name: "Becky", age: 43, voted: false },
{ name: "Joey", age: 41, voted: true },
{ name: "Jeff", age: 30, voted: true },
{ name: "Zack", age: 19, voted: false }
];
console.log(voterResults(voters));
答案 3 :(得分:0)
您可以简单地使用if条件
response.css('[itemprop="url"] ::attr(href)').extract_first()